Python 试图组织我的URL
我的网站针对不同的类别有不同的URL,这会返回基于类别的过滤查询集,例如,Python 试图组织我的URL,python,django,django-urls,Python,Django,Django Urls,我的网站针对不同的类别有不同的URL,这会返回基于类别的过滤查询集,例如,/sport/将返回Post.objects.filter(category='sport') 网址 选择.py CATEGORY_CHOICES = ( ('1', 'news'), ('2', 'sport'), ('3', 'technology'), ('4', 'science'), ('5', 'cars'), ('6', 'television') ) 不用列
/sport/
将返回Post.objects.filter(category='sport')
网址
选择.py
CATEGORY_CHOICES = (
('1', 'news'),
('2', 'sport'),
('3', 'technology'),
('4', 'science'),
('5', 'cars'),
('6', 'television')
)
不用列出url中的每个类别,我是否可以编写一个统一的url模式来说明所有类别?是的。事实上,看起来你已经成功了。您可以使用正则表达式识别类别名称并将其传递给视图,就像您对列表(“文章”)中最后一个url所做的那样 试着这样做:
urlpatterns = [
url(r'^(?P<category>\w+)/$', boxes_view, name='category'), #or whatever name
url(r'^(?P<category>\w+)/(?P<id>\d+)/', article, name='article'),
]
然后,您需要一个与元组类似的类别映射,但我会使用以下字典:
CATEGORY_MAP = {
'news': 1,
...
}
虽然我需要更多地了解您的模式,但从我所看到的情况来看,我建议类别应该是它们自己的模型,然后您可以在
Post
过滤器中执行category\uu name
,并删除从名称到数字的映射。您如何在try/except代码中获得类别值?目前,我是通过获取url路径的最后一个字来获取它的,但我看不出您是如何使用category\u number=category\u MAP[category]
将类别作为参数传递到视图函数的。这就是在Django url模式中使用正则表达式时发生的情况。url模式从哪里获得类别
?它会像{%url'boxes\u view'category='sport'%}
{%url'boxes\u view'category='technology'%}
那样从模板中获取它吗?是的,在url模板标记中就是这样做的。url模式本身从请求中的url获取关键字。好吧,我发现第一种方法有点困难,所以模型可能会更简单。该模型将如何准确工作……我是否创建一个单独的类别
模型,然后通过ForeignKey
将其链接到我的Post
模型?
urlpatterns = [
url(r'^(?P<category>\w+)/$', boxes_view, name='category'), #or whatever name
url(r'^(?P<category>\w+)/(?P<id>\d+)/', article, name='article'),
]
def boxes_view(request, category='news'):
try:
category_number = CATEGORY_MAP[category]
except KeyError:
# return 404?
posts = Post.objects.filter(category=category_number)
...
CATEGORY_MAP = {
'news': 1,
...
}