2011-08-25 81 views
3

我得到一個頁面時,我嘗試訪問http://127.0.0.7:8000/edit-paragraph/6/edit/,並出現以下錯誤未找到匹配:URL模式在Django

Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order: 
^admin/ 
^login/$ 
^login/home/ 
^logout/$ 
^edit-section/(?P<s_id>\d+)/edit/ 
^edit-section/(?P<s_id>\d+) 
^edit-paragraph/(?P<p_id>\d+)/edit/ 
The current URL, edit-paragraph/6/, didn't match any of these. 

在我的urls.py,我有:

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    (r'^login/$', 'mysite.auth.views.login_user'), 
    (r'^login/home/', 'mysite.auth.views.logged_in'), 
    (r'^logout/$', 'mysite.auth.views.logout_user'), 
    (r'^edit-section/(?P<s_id>\d+)/edit/', 'mysite.auth.views.edit_section_form'), 
    (r'^edit-section/(?P<s_id>\d+)', 'mysite.auth.views.edit_section'), 
    (r'^edit-paragraph/(?P<p_id>\d+)/edit/', 'mysite.auth.views.edit_paragraph') 

對我來說,它顯然看起來像這樣的網址http://127.0.0.7:8000/edit-paragraph/6/edit/應該匹配我的URLConf的最後一行。任何想法,我做錯了什麼?它能夠匹配類似網址:提前

r'^edit-section/(?P<s_id>\d+)/edit/' 

謝謝!


編輯:

事實證明,這是重定向。現在我都這樣了,瀏覽器是給找不到網頁錯誤:

@login_required 
def edit_paragraph(request, p_id): 
p = get_object_or_404(Paragraph, id=p_id) 

if request.method == 'POST': 
    form = ParagraphForm(request.POST) 
    if form.is_valid(): 
     p.title = request.POST['title'] 
     p.description = request.POST['description'] 
     p.save() 
     return HttpResponse('foo') 
    else: 
     form = ParagraphForm({ 'title': p.title, 'description': p.description }) 
     return render_to_response('auth/edit-paragraph.html', { 'form': form }, context_instance=RequestContext(request)) 

return HttpResponseRedirect('/edit-paragraph/'+p_id+'/edit/') 

編輯 - 解決:

這是我想出了修復,以避免無限循環,以及其它問題正在發生:

@login_required 
def edit_paragraph(request, p_id): 
    p = get_object_or_404(Paragraph, id=p_id) 
    form = ParagraphForm({ 'title': p.title, 'description': p.description }) 

    if request.method == 'POST': 
     form = ParagraphForm(request.POST) 
     if form.is_valid(): 
      p.title = request.POST['title'] 
      p.description = request.POST['description'] 
      p.save() 
      return HttpResponseRedirect('/login/home') 

    return render_to_response('auth/edit-paragraph.html', { 'form': form }, context_instance=RequestContext(request)) 
+5

在你的錯誤中說'edit-paragrah/6 /不匹配 - 在URL的結尾沒有'edit'。錯誤錯誤? – Pit

+0

@Pit - Nope ...我告訴它去/ edit-paragraph/6/edit /,並重定向到那個。 – katherine

+0

這很奇怪!這個錯誤是完全正確的,因爲你沒有一個匹配'edit-paragraph/6 /'的規則。我們能否看到'edit_paragraph'-view的代碼?也許有一個不應該在那裏的重定向! – Pit

回答

0

幾件事情:

  1. 如果您被重定向,請確保您實際上被重定向,並不僅僅是因爲您的瀏覽器對URL自動完成功能太有幫助。
    您的網站開發人員工具(螢火蟲,網頁檢查員等)會記錄重定向。
    許多瀏覽器在尾隨/附近有奇怪的行爲。您可以通過在您的瀏覽器之前沒有訪問的端口上運行您的開發服務器(即manage.py runserver 8001),然後重試。

  2. 如果您或您的urls.py(或您的視圖功能),它可能是url模式實際上沒有進行評估,以便Django的認爲你有404在你的情況,這並未在什麼地方打的異常似乎沒有發生,因爲django告訴你它正在檢查哪些URL。但是,您可能會嘗試在控制檯中導入settings.py,urls.pyviews.py文件,並嘗試直接運行您的視圖功能,並確保沒有發生異常。

+0

謝謝@Seth。很高興知道。 – katherine