2016-03-18 10 views
1

Im django yeni ve için kimlik parametresi kullanın veDjango NoReverseMatch QW-1/

URL.py

url(r'^deletePost/(?P<slug>[\w-]+)/$', views.delete_post, name='delete_post') 
sülük dönüştürmek nasıl karıştı şimdi Im sümüklüböcek
kullanılarak vuruldu

Şablon

<form method="POST" action="{% url 'delete_post' id=post.id %}">{% csrf_token %} 

    <button type="submit" class="btn btn-danger"> &nbsp Delete</button> 
</form> 

Views.py

def delete_post(request,slug): 
    posts=Post.objects.get(slug=slug) 
    if request.method == 'POST': 
     posts.delete() 
     return redirect("home") 

Nasıl Herhangi bir yardım takdir

oluşturulan yayını silmek için slug & id kullanabilirsiniz. Eğer kurşunu ve kimliği her ikisini de kullanmak istiyorsanız enter image description here

+0

[\ w-] 'yi [- \ w] değiştirmeyi deneyin. –

+1

Her iki "slug" kelimesini kullanmak isteyip istemediğiniz açık değil. ve id. Ya da "sülük" veya "id" kabul ederseniz? –

cevap

4

Benim açımdan, kimliği slug'a dönüştürmek istemezsiniz. Uygulamanızı yeterince esnek hale getirebilirsiniz, böylece slug veya id ile silebilirsiniz. Parametreleri buna göre işlemeniz yeterlidir.

Yani, böyle bir şey yapabilirsiniz:

url(r'^deletePost/(?P<slug>[\w-]+)/$', views.delete_post, name='delete_post_by_slug'), 
url(r'^deletePost/(?P<id>[0-9]+)/$', views.delete_post, name='delete_post_by_id') 

Ve görünümlerinde

urls.py: Bir içine 2 URL modelleri sıkıştırabilir

def delete_post(request, slug=None, id=None): 
    if slug: 
     posts=Post.objects.get(slug=slug) 
    if id: 
     posts=Post.objects.get(id=id) 
    #Now, your urls.py would ensure that this view code is executed only when slug or id is specified 

    #You might also want to check for permissions, etc.. before deleting it - example who created the Post, and who can delete it. 
    if request.method == 'POST': 
     posts.delete() 
     return redirect("home") 

Not bekar - ama bu yaklaşım onu ​​okunabilir ve anlaşılabilir tutar. Django framework, vb. Ile rahat olduğunuzda URL konsolidasyonunu anlamanıza izin vereceğim.

+1

Muhtemelen şablon etiketinde url adını güncellemeniz gerektiğinden bahsetmeye değer: '{% url 'delete_post_by_id' id = post.id%}'. – Alasdair

+0

ah .. kesinlikle doğru .. teşekkürler @Alasdair – karthikr

1

, sizin URL kalıbı gibi görünmelidir başvuru için şimdiden teşekkür ederiz

Hata:

url(r'^deletePost/(?P<slug>[\w-]+)-(?P<id>[0-9]+)/$', 
    views.delete_post, name='delete_post') 

Ve görünümünüzü bu gibi görünmelidir:

:
def delete_post(request, **kwargs): 
    # Here kwargs value is {'slug': 'qw', 'id': '1'} 
    posts = Post.objects.get(**kwargs) 
    if request.method == 'POST': 
     posts.delete() 
     return redirect('home') 
    # ... (I guess this view does not end here) 

Ve şablon da hem ayarlamak zorunda

<form method="POST" action="{% url 'delete_post' slug=post.id id=post.id %}">{% csrf_token %} 

    <button type="submit" class="btn btn-danger"> &nbsp Delete</button> 
</form>