2015-07-07 19 views
11

şikayetçi. Ama, sınıf tabanlı görünümlerinde, şikayet:dairesel ithalat

ImproperlyConfigured at /blog/new-post/ 

The included urlconf 'blog.urls' does not appear to have any 
patterns in it. If you see valid patterns in the file then the 
issue is probably caused by a circular import. 

Sınıfım böyle tanımlanır:

class BlogCreateView(generic.CreateView): 
    form_class = Blog 
    template_name = 'blog/new-post.html' 
    success_url = reverse('blog:list-post') 

nasıl düzgün sınıf tabanlı görünümlerinde success_url için reverse kullanılır? Teşekkürler.

PS: Ve ben bu hata sonrası runserver yeniden başlatmanız gerekiyor neden ilgileniyorum reverse çünkü işleri sizin yöntemde reverse kullanma

cevap

29

(runserver yeniden başlatmaya gerek olduğu TemplateDoesNotExists gibi bir hata gibi değil) görünüm çalıştırıldığında çağrılır. Eğer get_success_url geçersiz kılabilir Eğer get_success_url çağrılar reverse görünüm çalıştırıldığında çünkü

def my_view(request): 
    url = reverse('blog:list-post') 
    ... 

, o zaman yine reverse kullanabilirsiniz. Modül içe aktarıldığında URL'lerin yüklenmiş önce sonra reverse, denir çünkü

class BlogCreateView(generic.CreateView): 
    ... 
    def get_success_url(self): 
     return reverse('blog:list-post') 

Ancak, success_url ile reverse kullanamazsınız.

get_success_url'u geçersiz kılmak bir seçenektir, ancak en kolay düzeltme, tersine reverse_lazy kullanmaktır. Django uygulaması yüklendiğinde gerçekleştiği çünkü

from django.urls import reverse_lazy 
# from django.core.urlresolvers import reverse_lazy # old import for Django < 1.10 

class BlogCreateView(generic.CreateView): 
    ... 
    success_url = reverse_lazy('blog:list-post') 

runserver yeniden başlatma hakkında son soruyu cevaplamak için, ImproperlyConfigured hata TemplateDoesNotExists farklıdır. senin CBV içinde reverse_lazy yerine reverse kullanarak

+0

. Django 2.0 ile. reverse_lazy' 'ithalat django.urls reverse_lazy' – Chad

+0

@chad sayesinde ithal gelen, içe aktarma işlemini güncelledik' şimdi – Alasdair

6

deneyin. reverse Onun bir tembel değerlendirdi sürümü. Değer gerekli olana kadar yürütmez. Bilginize

from django.core.urlresolvers import reverse_lazy 

class BlogCreateView(generic.CreateView): 
    form_class = Blog 
    template_name = 'blog/new-post.html' 
    success_url = reverse_lazy('blog:list-post')