我應該如何設計url或視圖來保持url結構,如下例所示:Django - url結構
example.com/location/
example.com/category/
example.com/location/category/
url(r'^$', IndexView.as_view(), name='index'),
url(r'^(?P<town>[\w\-_]+)/$', TownView.as_view(), name="town_detail"),
url(r'^(?P<category_slug>[\w\-_]+)/$', CategoryView.as_view(), name="category_list"),
當我嘗試訪問類別下的URL我收到路由到TownView因爲URL模式幾乎是相同的這是可以接受的。
該類別應該放在example.com/c/category/下嗎?
編輯:
我沒有解決辦法我展示我下面的問題。 所有答案都非常好,樂於助人。
我將不得不驗證此解決方案的行爲方式並檢查它是否會導致任何問題。
url(r'^(?P<slug>[\w\-_]+)/$', BrowseView.as_view(), name="category_list"),
url(r'^(?P<slug>[\w\-_]+)/$', BrowseView.as_view(), name="town_detail"),
class BaseView(ListView):
queryset = Advert.objects.all().select_related('category',)
template_name = "adverts/category_view.html"
class BrowseView(BaseView):
def get_queryset(self, *args, **kwargs):
qs = super(BrowseView, self).get_queryset(*args, **kwargs)
try:
category = Category.objects.get(slug=self.kwargs['slug'])
except ObjectDoesNotExist:
object_list = qs.filter(location__slug=self.kwargs['slug'])
else:
category_values_list = category.get_descendants(include_self=True).values_list('id', flat=True)
object_list = qs.filter(category__in=category_values_list)
return object_list
這兩個都非常重要,我見過一些網站以我想要的方式處理位置和類別。 創建一個試圖獲取類別或城鎮的視圖是否正確? 它會產生額外的查詢,但在我看來它會做的伎倆。 – Efrin
創建它會給應用程序帶來額外的開銷。就像創建中間視圖一樣,檢查(可能是數據庫命中),如果是位置或類別,然後路由請求。一切都可以完成,但我更喜歡:) –