是否必须终止在urls.py中定义的url。与“ /”?

时间:2018-11-26 18:01:47

标签: python django

我刚刚开始学习Django,并想知道Django民意调查应用程序显示特定行为的原因。

根据以下代码,一切正常,但是当我从“详细信息” URL路径的末尾删除该“ /”时,我可以访问除主键(pk)之外的所有问题的详细信息页面。的pk 1,我收到404错误。如果能得到解释,那就太好了。 谢谢!干杯!

以下是代码文件:

投票/urls.py

from django.urls import path
from . import views

urlpatterns = [
        path('', views.index, name="index"),
        path('<int:question_id>/', views.detail, name='detail'),
        path('<int:question_id>/results/', views.results, name='results'),
        path('<int:question_id>/vote/', views.vote, name='vote'),
]

投票/views.py

.......
.......
def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/details.html', {'question': question})
.......
.......

polls / templates / details.html

<h1> {{ question.question_text }} </h1>
<ul>
{% for choice in question.choice_set.all %}
   <li> {{ choice.choice_text }} </li>
{% endfor %}
</ul>

1 个答案:

答案 0 :(得分:1)

有一个设置对此进行控制,APPEND_SLASH默认为True。这可能就是为什么它最初开始工作的原因。在不带斜杠的情况下访问此URL后,浏览器将缓存重定向,并在访问URL时尝试使用带斜杠的URL,而无需再次检查服务器。

您可以禁用this browser behaviour in Chrome,方法是:进入devtools,单击“关闭”按钮旁边的3个垂直圆点,该按钮上悬停时显示“ customize and control devtools”。在菜单中,选择设置并找到“网络”部分。您需要选中“禁用缓存(打开devtools时)”复选框。

启用此浏览器设置时,如果您在打开devtools的情况下重试,则不应再进行重定向,希望它应该可以工作。