Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 试图组织我的URL_Python_Django_Django Urls - Fatal编程技术网

Python 试图组织我的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') ) 不用列

我的网站针对不同的类别有不同的URL,这会返回基于类别的过滤查询集,例如,
/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,
    ...
}