2011-10-04 99 views
1

(遠很平常的,因爲我已經看到了谷歌),我有我的應用程序出現以下錯誤:的Django 1.3 NoReverseMatch錯誤

Caught NoReverseMatch while rendering: Reverse for 'add-post' with arguments '()' and keyword arguments '{}' not found. 

的事情是,我使用的反向網址第一次,所以我有點失去了什麼可能導致這個錯誤,顯然我擁有一切正常。有人能告訴我發生了什麼事嗎?

urls.py文件

urlpatterns = patterns('e_cidadania.apps.news.views', 

    url(r'^add/$', 'add_post', name='add-post'), 

    url(r'^(?P<post_id>\d+)/delete/$', DeletePost.as_view(), name='delete-post'), 

    url(r'^(?P<post_id>\d+)/edit/$', 'edit_post', name='edit-post'), 

    url(r'^(?P<post_id>\d+)', ViewPost.as_view(), name='view-post') 

) 

模板

[...] 

{% if perms.news.add_post %} 
    <div id="tools"> 
     <a href="{% url add-post %}"> 
      <img src="{{ STATIC_URL }}/assets/icons/add16.png" alt="{% trans 'Add new post' %}" title="{% trans 'Add new post' %}"/> 
     </a> 

[...] 

新聞views.py(該FIEL是140線長,所以我把它剪)

from django.http import HttpResponse, HttpResponseRedirect 
from django.shortcuts import render_to_response, get_object_or_404, redirect 
from django.contrib.auth.decorators import login_required, permission_required 

# Generic class-based views 
from django.views.generic.base import TemplateView, RedirectView 
from django.views.generic.list import ListView 
from django.views.generic.edit import CreateView, UpdateView, DeleteView 
from django.views.generic.detail import DetailView 

from django.template import RequestContext 
from django.views.generic.create_update import create_object 
from django.views.generic.create_update import update_object 

from django.contrib.auth.models import User 
from e_cidadania.apps.spaces.models import Space 
from e_cidadania.apps.news.models import Post 
from e_cidadania.apps.news.forms import NewsForm  

@permission_required('news.add_post') 
def add_post(request, space_name): 

    """ 
    Create a new post. Only registered users belonging to a concrete group 
    are allowed to create news. nly site administrators will be able to 
    post news in the index page. 
    """ 
    current_space = get_object_or_404(Space, url=space_name) 
    form = NewsForm(request.POST or None) 

    if request.method == 'POST': 
     form_uncommited = form.save(commit=False) 
     form_uncommited.author = request.user 

     # Get space id 
     place = Space.objects.get(url=space_name) 
     form_uncommited.space = place 

     # This should not be necessay since the editor filters the 
     # script tags 
     #if "<script>" in form_uncommited.post_message: 
     # return "SCRIPT TAGS ARE NOT ALLOWED" 

     if form.is_valid(): 
      form_uncommited.save() 
      return redirect('/spaces/' + space_name) 

    return render_to_response('news/post_add.html', 
           {'form': form, 'get_place': current_space}, 
           context_instance = RequestContext(request)) 

回答

2

在您顯示的信息中看不到任何明顯的錯誤,也許您可​​以發佈您的views.py?

請確保您的urls.py中的每個條目都已正確定義,因爲反向導入整個url定義,並且如果存在錯誤(如視圖尚未實現),則會引發錯誤。

此外,您的views.py add_post簽名是否與您的urls.py相匹配?很抱歉的愚蠢的問題,但是...只是確保;)

編輯在新的信息的光:

「高清add_post(請求,SPACE_NAME):」

這需要SPACE_NAME傳遞到視圖。從我看到的情況來看,你的反面並沒有傳遞任何論據。另外,請確保您的urls.py正確無誤。是否在「add /」之後缺少space_name參數的模式?

+0

噢,我錯過了url中的一個參數。當我檢查所有的urls.py(這個URL通過三次導入)時,我看到參數「space_name」缺失。修改爲{%url add-post get_place.url%},現在完美地工作:) –

0

嘗試使用代替路徑:

{% url e_cidadania.apps.news.views.add_post %} 
+0

我目前正在使用Django 1.3.1(我把它放在問題中:) :) –

+0

對不起。編輯:)當你直接在瀏覽器上瀏覽時,/ add/URL是否有效? –

+0

是的,它工作正常。回顧所有的urls.py文件後,我已經解決了這個問題。謝謝 –