当使用基于方法的视图时,使用reverse重定向没有对此抱怨,并且仍然可以找到根url conf.但是,在基于班级的观点中,它抱怨:

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.

我的类定义如下:

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

如何在基于类的视图中正确使用reverse for success_url?谢谢.

PS:,我感兴趣的是为什么在这个错误之后需要重新启动runserver(不像TemplateDoesNotExists那样的错误,它不需要重新启动runserver)

推荐答案

在您的方法中使用reverse是可行的,因为在运行视图时会调用reverse.

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

如果覆盖get_success_url,那么您仍然可以使用reverse,因为get_success_url在视图运行时调用reverse.

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

但是,不能将reversesuccess_url一起使用,因为在加载URL之前,在导入模块时会调用reverse.

覆盖get_success_url是一个选项,但最简单的修复方法是使用reverse_lazy,而不是相反.

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的最后一个问题,ImproperlyConfigured错误与TemplateDoesNotExists不同,因为它发生在Django应用程序加载时.

Django相关问答推荐

Django在保存时更新m2m对象

其中实际的数据库提取在DRF list()中完成

如何显示;Django认证系统;在模板中?

如何访问 django 模板中的字典值?

如何将数据(具体归档)从views.py 传递到models.py

如何重命名标准 django-registration 模板的名称

如何在 django 中修改现有模型实例?

Django 模板:翻译带有 HTML 的文本块的最佳实践

Django ORM 和锁定表

更好的 ArrayField 管理小部件?

验证 Django 模型对象的正确方法?

测试 Django 信号的正确方法

如何从 django 的 db 模型中获取字段类型字符串

如何在 django 元素中开始做 TDD?

Django模板转换为字符串

显式 cursor.close() 的必要性

如何在 django 中使用更少的 css?

如何使用 ModelSerializer 显示所有模型字段?

在 Django 中查询 top x 元素

Django - 指定 Django 管理员应该使用哪个模型管理器