django - django.shortcuts reverse() 在类 var 结果中调用错误 URLconf 'xxx.urls' 似乎没有任何模式
问题描述
1.evn
- python3.5
- django2.2
2.问题
- 在初始化类变量时调用 django.shortcut: reverse(),编译完全没问题。
- 出现运行时错误:包含的 URLconf 'xxx.urls' 中似乎没有任何模式。如果您在文件中看到有效模式,则问题可能是由循环导入引起的。
- 此外,此错误消息非常具有误导性,我花了很多时间检查实际上完全正确的 url。
3.代码示例
from django.views import View
from django.shortcuts import render, reverse, redirect
class LoginView(View):
main_page = reverse('main') => cause runtime error
def get(...):
def post(...):
urlpatterns = [
path(r'login/', authviews.LoginView.as_view(), name='login'),
path(r'main/', authviews.MainView.as_view(), name='main'),
...
4.运行时错误信息
File ".../auth/view/views.py", line 10, in <module>
class LoginView(View):
File ".../auth/view/views.py", line 13, in LoginView
main_page = reverse('main')
File ".../.local/lib/python3.5/site-packages/django/urls/base.py", line 90, in reverse
return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
File ".../.local/lib/python3.5/site-packages/django/urls/resolvers.py", line 600, in _reverse_with_prefix
self._populate()
File ".../.local/lib/python3.5/site-packages/django/urls/resolvers.py", line 438, in _populate
for url_pattern in reversed(self.url_patterns):
File ".../.local/lib/python3.5/site-packages/django/utils/functional.py", line 80, in __get__
res = instance.__dict__[self.name] = self.func(instance)
File ".../.local/lib/python3.5/site-packages/django/urls/resolvers.py", line 580, in url_patterns
raise ImproperlyConfigured(msg.format(name=self.urlconf_name))
django.core.exceptions.ImproperlyConfigured: The included URLconf 'xxx.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.
5.分析
- 在 class_view 中调用“reverse()”时,可能尚未加载 url
6.分辨率
- way1:使用 django.urls.reverse_lazy() 代替 => 建议方式
- 方式2:将“reverse('main')”调用移动到 get() 或 post()
7.建议
- 最好将运行时错误消息细化为更准确
解决方案
推荐阅读
- php - '列'userimage'不能为空'错误仅在较大的图像文件上
- symfony - Symfony 和 TWIG:模板目录的路由无法正常工作
- angular - Angular 6,将 http 响应映射到模型
- microservices - 消息传递:您的消息看起来如何
- python - 如何使用 xmlsec(或其他更合适的包)签署 XML
- machine-learning - 在回归问题中缩放然后评估性能度量的正确程序是什么?
- lync - 尝试访问 Lync.DeviceManager.AudioDevices - 但不是 Count 属性时引发异常
- cordova - Ionic 的“电容器更新”不会从 config.xml 中提取 PLAY_SERVICES_VERSION 变量
- javascript - 如何用 DOMParser 输出替换/填充整个空白 html 页面?
- android - Android初学者//为什么我的变量在我应该填充它们之后都是0?