【问题标题】:NoReverseMatch for Django formDjango 表单的 NoReverseMatch
【发布时间】:2013-06-29 20:23:53
【问题描述】:

我是 Django 新手,遇到了 NoReverseMatch 错误。有谁知道我该如何解决这个问题?

异常值:“profile_list.html”的反向参数“()”和关键字参数“{}”未找到。

edit_profile.html

<h1>Add Profile</h1>

<form action="{% url 'questions-new' %}" method="POST">
  {% csrf_token %}
  <ul>
    {{ form.as_ul }}
  </ul>
  <input type="submit" value="Save" />
</form>

<a href="{% url 'profile-list' %}">back to list</a>

urls.py

from django.conf.urls import patterns, include, url

import questions.views

urlpatterns = patterns('',
    url(r'^$', questions.views.ListProfileView.as_view(),
        name='profile-list'),
    url(r'^new$', questions.views.CreateProfileView.as_view(),
        name='questions-new',),
)

views.py

from django.views.generic import ListView

from questions.models import Profile

from django.core.urlresolvers import reverse
from django.views.generic import CreateView

class ListProfileView(ListView):
    model = Profile
    template_name = 'profile_list.html'

class CreateProfileView(CreateView):

    model = Profile
    template_name = 'edit_profile.html'

    def get_success_url(self):
        return reverse('profile_list.html')

【问题讨论】:

    标签: python django


    【解决方案1】:

    您的get_success_url 错误。将其更改为以下内容:

    def get_success_url(self):
        return reverse('profile-list')
    

    reverse 应与您在 urls.py 模式中提供的名称结合使用,而不是模板名称。

    【讨论】:

      【解决方案2】:

      您的reverse 呼叫不正确。根据docs

      reverse(viewname[, urlconf=None, args=None, kwargs=None, current_app=None])

      viewname 是函数名(要么是 函数引用,或名称的字符串版本,如果您使用过 urlpatterns 中的格式)或 URL 模式名称。

      所以,替换

      reverse('profile_list.html')
      

      reverse('profile-list')
      

      profile-list 是您在 urls.py 中定义的 URL 模式名称。

      希望对您有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-08-08
        • 1970-01-01
        • 2017-07-17
        • 2019-03-24
        • 2014-02-10
        • 2017-05-21
        相关资源
        最近更新 更多