【问题标题】:Any /polls URL always call index() function in views.py任何 /polls URL 总是调用 views.py 中的 index() 函数
【发布时间】:2018-08-11 17:59:58
【问题描述】:
polls/urls/py


from django.conf.urls import url
from . import views

urlpatterns = [

url('', views.index, name='index'),
url('<int:question_id>/', views.detail, name='detail'),

# ex: /polls/5/results/
url('<int:question_id>/results/', views.results, name='results'),
# ex: /polls/5/vote/
url('<int:question_id>/vote/', views.vote, name='vote'),
]


views.py

from __future__ import unicode_literals
from django.http import HttpResponse
from .models import Question
from django.template import loader

# from django.shortcuts import render

def index(request):
latest_question_list = Question.objects.order_by('-pub_date')[:5]
template = loader.get_template('polls/index.html')
context = {
    'latest_question_list': latest_question_list,
}
return HttpResponse(template.render(context, request))


def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id)


def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id)


def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)

url=http://127.0.0.1:8000/polls

url=http://127.0.0.1:8000/polls/1/

url=http://127.0.0.1:8000/polls/1/results

这些所有 url 都提供相同的映射相同的函数 index()。任何帮助将不胜感激

【问题讨论】:

  • 首先,永远不要将两个不同版本的文档混为一谈。您将两者的功能混为一谈,导致您产生不希望的结果

标签: django python-2.7 django-views django-urls


【解决方案1】:

首先,确保您遵循的教程与您的 Django 版本相匹配,这一点真的很重要。这是Django 2.0Django 1.11 的链接。

您遇到了意外行为,因为您混合了旧的 url 和新的 path 语法。如果您使用的是 Django 2.0,请更改导入并更新您的 URL 模式:

from django.urls import path

urlpatterns = [

    path('', views.index, name='index'),
    path('<int:question_id>/', views.detail, name='detail'),

    # ex: /polls/5/results/
    path('<int:question_id>/results/', views.results, name='results'),
    # ex: /polls/5/vote/
    path('<int:question_id>/vote/', views.vote, name='vote'),

]

如果您使用的是早期版本的 Django,则需要改用正则表达式。例如,Django 1.11 教程让您编写:

from django.conf.urls import url

urlpatterns = [
    # ex: /polls/
    url(r'^$', views.index, name='index'),
    # ex: /polls/5/
    url(r'^(?P<question_id>[0-9]+)/$', views.detail, name='detail'),
    # ex: /polls/5/results/
    url(r'^(?P<question_id>[0-9]+)/results/$', views.results, name='results'),
    # ex: /polls/5/vote/
    url(r'^(?P<question_id>[0-9]+)/vote/$', views.vote, name='vote'),
]

【讨论】:

    【解决方案2】:

    这是哪个版本的 Django?您的 url 模式看起来像是 2.0 和旧路由的混合体。

    您的空 url 模式可能会匹配任何内容,因此不会调用其他路由。

    对于 Django 2.0 + 执行上面@Alasdair 对旧 Django 版本的建议,如下所示:

    urlpatterns = [
        url(r'^$', views.index, name='index'),
    ] 
    

    【讨论】:

      猜你喜欢
      • 2018-12-19
      • 2018-02-21
      • 1970-01-01
      • 2022-11-10
      • 2019-03-27
      • 2018-08-20
      • 2018-12-25
      • 1970-01-01
      • 2016-08-28
      相关资源
      最近更新 更多