网址中的id(数字)路径

时间:2018-12-31 04:39:37

标签: python django url

我是django的新手

在urls.py中,我这样设置路径。我试图用网址创建一个页面:localhost:8000 / topics / 1 /

urlpatterns = [
    path('topics/(?P<topic_id>\d+)/', views.topic, name='topic'),
]

在views.py中。代码是这样的:

def topic(request, topic_id):
    """Show a single topic and all its entries"""
    topic = Topic.objects.get(id=topic_id)
    entries = topic.entry_set.order_by('date_added')
    context = {'topic': topic, "entries": entries}
    return render(request, 'learning_logs/topic.html', context)

输入localhost:8000 / topics / 1 /时出现错误404。

topics /(?P \ d +)/ [name ='topic']

当前路径topic / 1 /与任何这些都不匹配。

但正确的URL原来是:localhost:8000 / topics /(%3FP1%5Cd +)/

URL中的路径是否有问题,或者是什么问题?

1 个答案:

答案 0 :(得分:3)

尝试

urlpatterns = [
    path('topics/<topic_id>/', views.topic, name='topic'),
]

如果您期望一个整数,则可以将其指定为

urlpatterns = [
    path('topics/<int:topic_id>/', views.topic, name='topic'),
]

为什么topics/(?P<topic_id>\d+)/'不起作用

您可以混合使用。如果您要在网址中提供 regex包含的表达式 ,请使用re_path()
因此,模式将为

from django.urls import re_path

urlpatterns = [
    re_path('topics/(?P<topic_id>\d+)/', views.topic, name='topic'),
]