2015-12-18 43 views
2

我的方法有什麼問題?Django NoReverseMatch at/school/new-school/

當我發佈新數據時,我希望它返回到輸入fileds爲空的頁面。但它給了我這個錯誤

NoReverseMatch at /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'] 

這就是我如何在模板中指定url。

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

當顯示的頁面,我可以點擊的鏈接會跳轉到正確的頁面。但是當我發佈數據時,它會拋出上述錯誤。我一直在這上幾個小時,並在網上閱讀了許多答案。看來我的是一個獨特的案例。

回答

0

嘗試將名稱空間添加到get_absolute_url()。

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

感謝。這個伎倆。 – gentleoyink

0

確保您的命名空間導入您的應用程序的網址,在項目的網址,如:

url(r'^school/', include('school.urls', namespace="school")) 

使用命名空間,你的模板是這樣的:{% url 'school:new-school' %}

或者刪除命名空間:

url(r'^school/', include('school.urls')) 

在模板中使用沒有命名空間的url:{% url 'new-school' %}

在這種情況下使用get_absolute_url將是一種不好的方法,因爲它是一種實例方法,旨在獲取單個模型實例的url。

如果你想添加的方法模型,你應該使用這樣的事情:

@classmethod 
def get_create_url(cls): 
    return reverse_lazy('school:new-school') 
+0

謝謝Alex。我按照你的說法行事。我的項目網址已經如您所述,使用名稱空間。我還離開了get_absolute_url,並按照Geo的建議添加了名稱空間。這個伎倆。 – gentleoyink

+0

get_absolute_url,正如我上面描述的那樣,被設計爲返回sigle模型的url。所以你的方法有些問題。 –

+1

謝謝。我明白你的意思了。 – gentleoyink