2017-08-31 14 views
0

私のアプリケーションでは、特定のURLに基​​づいてアイテムのリストを表示したいと思います。たとえば、mysite.com/restaurants/chinese/と入力すると、すべての中華レストランが表示されます。 mysite.com/restaurants/american/と入力すると、アメリカのレストランなどをすべて表示したいと思います。私はmysite.com/restaurants/入力するときしかし、私はすべてのレストランを表示したいので、私はこのコードを書いた:Djangoに「空のスラグ」パターンが見つからないページ

urls.pyを

from django.conf.urls import url, include 
from django.contrib import admin 


urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^restaurants/', include('restaurants.urls')), 
] 

レストラン/ urls.py

from django.conf.urls import url 
from django.views.generic import ListView 

from .views import RestaurantLocationListView 

urlpatterns = [ 
    url(r'^(?P<slug>\w+)/$', RestaurantLocationListView.as_view()), 
] 

レストラン/ビューア

from django.db.models import Q 
from django.shortcuts import render 
from django.views.generic import ListView 

from .models import RestaurantLocation 

class RestaurantLocationListView(ListView): 
    def get_queryset(self): 
     slug = self.kwargs.get('slug') 

     if slug: 
      queryset = RestaurantLocation.objects.filter(
       Q(category__iexact=slug) | Q(category__icontains=slug) 
      ) 
     else: 
      queryset = RestaurantLocation.objects.all() 

     return queryset 

mysite.com/restaurants/を除いた場合を除いて、すべてうまく動作します。これは、代わりに私にすべてのレストランのリストの404エラーを与えると私は理由を知らない。みんな助けてくれますか?

答えて

4

URLの問題のようです。 restaraunts/url.pyにURLを追加する必要があります。

urlpatterns = [ 
    url(r'^$', RestaurantLocationListView.as_view()), # add it before 
    url(r'^(?P<slug>\w+)/$', RestaurantLocationListView.as_view()), 
] 
+0

感謝しました。しかし、なぜこれが起こっているのか知っていますか? – flpn

+1

@flpn 'mysite.com/restaurants /'は ''^(?P \ w +)/ $''と一致しません。 –

関連する問題