Python Django教程:不完整的格式错误

Python Django教程:不完整的格式错误,python,django,Python,Django,我对Django教程有问题。。。我从我的一个模板中得到了一个不完整的格式错误,但我没有发现任何具体错误 Environment: Request Method: GET Request URL: http://localhost:8000/polls/1/ Django Version: 1.9.5 Python Version: 3.5.1 Installed Applications: ['polls.apps.PollsConfig', 'django.contrib.admin'

我对Django教程有问题。。。我从我的一个模板中得到了一个
不完整的格式
错误,但我没有发现任何具体错误

Environment:


Request Method: GET
Request URL: http://localhost:8000/polls/1/

Django Version: 1.9.5
Python Version: 3.5.1
Installed Applications:
['polls.apps.PollsConfig',
 'django.contrib.admin',
 'django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.messages',
 'django.contrib.staticfiles']
Installed Middleware:
['django.middleware.security.SecurityMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.middleware.common.CommonMiddleware',
 'django.middleware.csrf.CsrfViewMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware',
 'django.middleware.clickjacking.XFrameOptionsMiddleware']


Template error:
In template C:\Users\Monte Milanuk\Desktop\mysite2\templates\polls\detail.html, error at line 7
   incomplete format   1 : <h1>{{ question.question_text }}</h1>
   2 : 
   3 : {% if error_message %}
   4 :     <p><strong>{{ error_message }}</strong></p>
   5 : {% endif %}
   6 : 
   7 : <form action=" {% url 'polls:vote' question.id %} " method="post">
   8 :     {% csrf_token %}
   9 :     {% for choice in question.choice_set.all %}
   10 :         <input type="radio" name="choice" id="choice{{ forloop.counter }}"
   11 :                value="{{ choice.id }}" />
   12 :         <label for="choice{{ forloop.counter }}">{{ choice.choice_text }}</label><br/>
   13 :     {% endfor %}
   14 : 
   15 : <input type="submit" value="Vote" />
   16 : </form>
   17 : 

Traceback:

File "C:\Users\Monte Milanuk\Anaconda3\envs\django\lib\site-packages\django\core\handlers\base.py" in get_response
  149.                     response = self.process_exception_by_middleware(e, request)

File "C:\Users\Monte Milanuk\Anaconda3\envs\django\lib\site-packages\django\core\handlers\base.py" in get_response
  147.                     response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "C:\Users\Monte Milanuk\Desktop\mysite2\polls\views.py" in detail
  17.     return render(request, 'polls/detail.html', {'question': question})

File "C:\Users\Monte Milanuk\Anaconda3\envs\django\lib\site-packages\django\shortcuts.py" in render
  67.             template_name, context, request=request, using=using)

File "C:\Users\Monte Milanuk\Anaconda3\envs\django\lib\site-packages\django\template\loader.py" in render_to_string
  97.         return template.render(context, request)

File "C:\Users\Monte Milanuk\Anaconda3\envs\django\lib\site-packages\django\template\backends\django.py" in render
  95.             return self.template.render(context)

File "C:\Users\Monte Milanuk\Anaconda3\envs\django\lib\site-packages\django\template\base.py" in render
  206.                     return self._render(context)

File "C:\Users\Monte Milanuk\Anaconda3\envs\django\lib\site-packages\django\template\base.py" in _render
  197.         return self.nodelist.render(context)

File "C:\Users\Monte Milanuk\Anaconda3\envs\django\lib\site-packages\django\template\base.py" in render
  992.                 bit = node.render_annotated(context)

File "C:\Users\Monte Milanuk\Anaconda3\envs\django\lib\site-packages\django\template\base.py" in render_annotated
  959.             return self.render(context)

File "C:\Users\Monte Milanuk\Anaconda3\envs\django\lib\site-packages\django\template\defaulttags.py" in render
  499.             url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)

File "C:\Users\Monte Milanuk\Anaconda3\envs\django\lib\site-packages\django\core\urlresolvers.py" in reverse
  600.     return force_text(iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs)))

File "C:\Users\Monte Milanuk\Anaconda3\envs\django\lib\site-packages\django\core\urlresolvers.py" in _reverse_with_prefix
  488.                 if re.search('^%s%s' % (re.escape(_prefix), pattern), candidate_pat % candidate_subs, re.UNICODE):

Exception Type: ValueError at /polls/1/
Exception Value: incomplete format
views.py

from django.conf.urls import url

from . import views

app_name = 'polls'
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'),
]
from django.shortcuts import get_object_or_404, render
from django.http import HttpResponse, HttpResponseRedirect
from django.core.urlresolvers import reverse

from .models import Choice, Question


# Create your views here.
def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)


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


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


def vote(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        #  Redisplay the question voting form.
        return render(request, 'polls/detail.html',
                      {'question': question,
                       'error_message': "You didn't select a choice.",
                       })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        #  Always return an HttpResponseRedirect after successfully dealing with
        #  POST data.  This prevent data from being posted twice if a user hits
        #  the Back button.
        return HttpResponseRedirect(
            reverse('polls:results', args=(question.id,)))

我的代码中是否还有其他地方应该查找此错误的来源?

此url模式中的
%
导致此错误。移除它

url(r'^(?P<question_id>[0-9]+)/vote/%$', views.vote, name='vote'),
url(r'^(?P[0-9]+)/vote/%$,views.vote,name='vote'),

此url模式中的
%
导致错误。移除它

url(r'^(?P<question_id>[0-9]+)/vote/%$', views.vote, name='vote'),
url(r'^(?P[0-9]+)/vote/%$,views.vote,name='vote'),

请显示您的url模式。您应该创建一个新的url模式。@Sayse真的。Django项目涉及的文件数量如此之多,你认为这是如何工作的?看看Django标签中的大多数其他问题,它们似乎都能让你找到一个。请显示你的url模式。你应该创建一个。@Sayse真的。随着Django项目涉及的文件数量的增加,您认为它是如何工作的?看看Django标签中的大多数其他问题,它们似乎都能成功地完成一个任务!如果您不介意我问一下,URL模式中用于“投票”的
%
如何影响“详细信息”的视图?为什么会出现如此模糊的错误消息?我同意这是一个很难调试的错误消息,因为错误页面显示了模板,但问题在于
url.py
。由于问题在于
{%url%}
标记,并且回溯提到
反向
,因此查看url是个好主意。在Python中,
%
符号用于字符串格式,例如
“我的名字是%s”%name
。百分号本身会导致
格式不完整错误
。谢谢!如果您不介意我问一下,URL模式中用于“投票”的
%
如何影响“详细信息”的视图?为什么会出现如此模糊的错误消息?我同意这是一个很难调试的错误消息,因为错误页面显示了模板,但问题在于
url.py
。由于问题在于
{%url%}
标记,并且回溯提到
反向
,因此查看url是个好主意。在Python中,
%
符号用于字符串格式,例如
“我的名字是%s”%name
。百分号本身会导致
格式不完整错误