2016-04-05 11 views
1

eşleşir ve ben bir sorun tökezledi sonrası başlıkları için sümüklüböcek hayata sahip.

Hayır Mesaj verilen sorgusuyla eşleşen blog.views.post_detail:
talep URL GET: http://localhost:8000/post/new/
tarafından Yükseltilmiş
hatası (404)
Talebi Yöntemi bulunamadıSayfa (404) - Hayır Mesaj Django blog çalışıyorum verilen sorgu

Sayfa olduğunu.

Bu benim urls.py

from django.conf.urls import include, url 
from . import views 
from django.conf import settings 
from django.conf.urls.static import static 

urlpatterns = [ 
    url(r'^$', views.post_list), 
    url(r'^register', views.register), 
    url(r'^activate/(?P<activation_key>\w+)/', views.register_confirm), 
    url(r'^email_check', views.email_check), 
    url(r'^password_check', views.password_check), 
    url(r'^login', views.login), 
    url(r'^edit/$', views.update_profile), 
    url(r'^post/(?P<slug>[-_\w]+)/$', views.post_detail), 
    url(r'^post/new/$', views.post_new, name='post_new'), 
    url(r'^post/(?P<slug>[-_\w]+)/edit/$', views.post_edit, name='post_edit'), 
    url(r'^drafts/$', views.post_draft_list, name='post_draft_list'), 
    url(r'^post/(?P<slug>[-_\w]+)/publish/$', views.post_publish, name='post_publish'), 
    url(r'^post/(?P<slug>[-_\w]+)/remove/$', views.post_remove, name='post_remove'), 
    url(r'^post/(?P<slug>[-_\w]+)/comment/$', views.add_comment_to_post, name='add_comment_to_post'), 
    url(r'^comment/(?P<slug>[-_\w]+)/approve/$', views.comment_approve, name='comment_approve'), 
    url(r'^comment/(?P<slug>[-_\w]+)/remove/$', views.comment_remove, name='comment_remove'), 
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

view.py dosyasıdır

@login_required 
def post_new(request): 
    if request.method == "POST": 
     form = PostForm(request.POST) 
     if form.is_valid(): 
      post = form.save() 
      post.author = request.user 
      post.published_date = timezone.now() 
      post.save() 
      return redirect('blog.views.post_detail', slug=post.slug) 
    else: 
     form = PostForm() 
    return render(request, 'blog/post_new.html', {'form': form}) 

Bu hata, işte "post_detail" tarafından gündeme söylüyor o olduğu

def post_detail(request, slug): 
    post = get_object_or_404(Post, slug=slug) 
    return render(request, 'blog/post_detail.html', {'post': post}) 

Neyi özlüyorum?

cevap

4

new regex [-_\w]+ eşleştiği için bu gerçekleşiyor.

You have yeniden sipariş

Değişim Bu URL kalıpları içinde url girdileri için: Bununla

url(r'^post/(?P<slug>[-_\w]+)/$', views.post_detail), 
url(r'^post/new/$', views.post_new, name='post_new'), 

:

url(r'^post/new/$', views.post_new, name='post_new'), 
url(r'^post/(?P<slug>[-_\w]+)/$', views.post_detail), 

Açıklama:

post_detail URL girişi i n kodunuz post_new url'den önce değerlendirilir. Bu, post_new üzerinden post_detail daha fazla öncelik verir. post_detail url[-_\w]+ ve new normal ifadeyle eşleşir eşleşir /post/ + şey olduğundan

Django sen post_detail görünüm için slug olarak new geçiyoruz düşünüyor ve bakış için bir anahtar kelime argüman olarak geçirir. new ile sümüklü posta olmadığı için, görünüm 404 Not found döndürür.

post_new yukarıdaki post_detail olduğunu post_new görünümü ve post_detal için normal ifade maç puanla /post/ + şey /post/new/ puan.

+0

Çalışıyor (teşekkürler!), Ama nedenini anladım mı emin değilim. –

+1

Güncellenmiş cevabı kontrol edin :) – v1k45