Django NoReverseMatch at / school / new-school /

时间:2015-12-18 04:41:15

标签: python django url reverse lazy-evaluation

我的做法出了什么问题?

当我发布新数据时,我希望它返回到输入文件为空的页面。但它给了我这个错误

NoReverseMatch at /school/new-school/
     

使用参数'()'和关键字参数'{}'找不到'new-school'的反转。尝试了0种模式:[]

这是我的模特。请注意,reverse_lazy已导入

class SchoolList(models.Model):
    name = models.CharField(max_length=15, null=False) 

    def __str__(self):
        return '%s' % (self.name)

    def get_absolute_url(self):
        return reverse_lazy('new-school') 

这是我的url.py

url(r'^school-list/$', SchoolListtView.as_view(), name='school-list'),   
url(r'^new-school/$', CreateSchoolListView.as_view(), name='new-school'),       
url(r'^school(?P<pk>\d+)/update/$', SchoolListUpdate.as_view(), name='update-school')

这是我对创造的看法。

class CreateSchoolListView(CreateView):
    template_name = 'school\create_form.html'
    model = SchoolList
    fields = ['name']

这就是我在模板中指定网址的方式。

<a href="{% url 'school:new-school' %}">Create New School</a>
<a href="{% url 'school:school-list' %}">View all Schools</a>

显示页面时,我可以单击链接,它将转到正确的页面。但是当我发布数据时,它会抛出上述错误。我已经在这几个小时,并在网上阅读了很多答案。看来我的是一个独特的案例。

2 个答案:

答案 0 :(得分:0)

尝试将名称空间添加到get_absolute_url()。

def get_absolute_url(self):
    return reverse_lazy('school:new-school') 

答案 1 :(得分:0)

确保您在项目的网址中导入应用的网址,例如:

__weak SRConnection *connection = [SRConnection connectionWithURL:SIGNALR_PATH];

[connection addValue:[[NSUserDefaults standardUserDefaults] objectForKey:kAccessToken] forHTTPHeaderField:@"MyAuthentication"];

connection.received = ^(NSString * data) {
    NSLog(@"%@",data);
};
connection.started =  ^{
    [connection send:@"hello world"];
};

[connection start];

在模板中使用名称空间,如下所示:url(r'^school/', include('school.urls', namespace="school"))

或删除命名空间:

{% url 'school:new-school' %}

在模板中使用不带名称空间的网址:url(r'^school/', include('school.urls'))

在这种情况下使用get_absolute_url会很糟糕,因为它是一个实例方法,旨在获取单个模型实例的url。

如果要将方法添加到模型中,则应使用以下内容:

{% url 'new-school' %}