/index/ 处的 NoReverseMatch

NoReverseMatch at /index/

我遇到了所有类似的问题,但我一无所获,我已经阅读了 djangogirls 和 Django 官方教程,据我所知它应该可以工作。

polls/templates/index.html 文件中我有这个:

[...]
{% if forms %}
    <ul>
        {% for form in forms %}
            <li>
                <h1><a href="{% url 'form_detail' pk=form.pk %}">
                    {{ form.fname }}
                </a></h1>
                [...]

在我的 polls/urls.py 文件中我有这个:

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

app_name = 'polls'
urlpatterns = [
    [...]
    url(r'^index/$', 'polls.views.site_index'),
    [...]
    url(r'^form/(?P<pk>\d+)/$', views.form_detail, name='form_detail'),
    [...]

在我的 polls/views.py 文件中我有这个:

from django.shortcuts import render, render_to_response, redirect, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from django.core.context_processors import csrf
from django.core.urlresolvers import reverse
from django.contrib.auth.models import User
from .models import Nform, Choice, Question, Post
from django.template import loader
from django.utils import timezone
from django.views import generic
from django.contrib import auth
from django.db import models
from .form import PostForm

def site_index(request):
    forms = Nform.objects.order_by('-published_date')
    return render_to_response('polls/index.html', {'forms': forms})


def form_detail(request, pk):
    current_form = get_object_or_404(Nform, pk=pk)
    fame = current_form.fname
    latest_question_list = Question.objects.filter(for_form=fame).order_by('-pub_date')
    choice_quest_list = []
    text_quest_list = []
    form = PostForm()
    for i in range(len(latest_question_list)):
        if len(latest_question_list[i].choice_set.all()) == 0:
            text_quest_list.append(latest_question_list[i])
        else:
            choice_quest_list.append(latest_question_list[i])
    return render(request, 'polls/read_only.html', {'choice_quest_list': choice_quest_list, 'text_quest_list': text_quest_list, 'form_name': fame, 'form': form})
[...]

我假设我在某个地方犯了一个非常简单的错误,我将非常感谢任何发现它的人。

查看此 issue 图片。

Here 是我代码的 link。

谢谢:)

发生这种情况是因为您在应用程序 urls.py 中定义了一个名为 app_name 的变量。

当您定义该变量时,它就成为您的 url 命名空间。

您要么必须像这样反转您的 url:

<h1><a href="{% url 'polls:form_detail' pk=form.pk %}">

或删除 app_name 变量以直接使用 url 名称。

阅读更多关于 reversing url names @ django-docs