Python 装饰视图导致ViewDoesNotExister错误
Python 装饰视图导致ViewDoesNotExister错误,python,django,Python,Django,reverse('main_page')适用于Django shell $ python manage.py shell In [1]: import auth_lifecycle.view__profile In [2]: from django.core.urlresolvers import reverse In [3]: reverse('main_page') Out[3]: '/auth_lifecycle/' 但是取消注释该视图文件中的login\u是必需的decor
reverse('main_page')
适用于Django shell
$ python manage.py shell
In [1]: import auth_lifecycle.view__profile
In [2]: from django.core.urlresolvers import reverse
In [3]: reverse('main_page')
Out[3]: '/auth_lifecycle/'
但是取消注释该视图文件中的login\u是必需的
decorator
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse
from django.shortcuts import render
from django.template import RequestContext
#@login_required(login_url=reverse('main_page'))
def get_rendered(request):
return render(request, 'auth_lifecycle/user_profile.html',
context_instance=RequestContext(request))
然后重新启动shell并尝试
import auth_lifecycle.view__profile
原因
ViewDoesNotExist:无法导入身份验证\u lifecycle.view\u profile.get\u rendered。模块验证生命周期中不存在视图。查看配置文件。
为什么?
完全回溯:
In [1]: import auth_lifecycle.view__profile
---------------------------------------------------------------------------
ViewDoesNotExist Traceback (most recent call last)
<ipython-input-1-f8b0669189a9> in <module>()
----> 1 import auth_lifecycle.view__profile
/home/jeffy/django_files/django_auth_lifecycle/auth_lifecycle/view__profile.py in <module>()
19 #After the login view is created, change this to 'login':
20 PROFILE_LOGGED_OUT_REDIRECT_URL_NAME='main_page'
---> 21 reverse('main_page')
22 @login_required(login_url='http://usatoday.com')
23 #@login_required(login_url=reverse(PROFILE_LOGGED_OUT_REDIRECT_URL_NAME))
/home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/site-packages/django/core/urlresolvers.py in reverse(viewname, urlconf, args, kwargs, prefix, current_app)
544 resolver = get_ns_resolver(ns_pattern, resolver)
545
--> 546 return iri_to_uri(resolver._reverse_with_prefix(view, prefix, *args, **kwargs))
547
548 reverse_lazy = lazy(reverse, str)
/home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/site-packages/django/core/urlresolvers.py in _reverse_with_prefix(self, lookup_view, _prefix, *args, **kwargs)
408
409 if not self._populated:
--> 410 self._populate()
411
412 try:
/home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/site-packages/django/core/urlresolvers.py in _populate(self)
290 else:
291 parent_pat = pattern.regex.pattern
--> 292 for name in pattern.reverse_dict:
293 for matches, pat, defaults in pattern.reverse_dict.getlist(name):
294 new_matches = normalize(parent_pat + pat)
/home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/site-packages/django/core/urlresolvers.py in reverse_dict(self)
313 language_code = get_language()
314 if language_code not in self._reverse_dict:
--> 315 self._populate()
316 return self._reverse_dict[language_code]
317
/home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/site-packages/django/core/urlresolvers.py in _populate(self)
301 else:
302 bits = normalize(p_pattern)
--> 303 lookups.appendlist(pattern.callback, (bits, p_pattern, pattern.default_args))
304 if pattern.name is not None:
305 lookups.appendlist(pattern.name, (bits, p_pattern, pattern.default_args))
/home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/site-packages/django/core/urlresolvers.py in callback(self)
229 return self._callback
230
--> 231 self._callback = get_callable(self._callback_str)
232 return self._callback
233
/home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/functools.py in wrapper(*args, **kwds)
426 hits += 1
427 return result
--> 428 result = user_function(*args, **kwds)
429 cache[key] = result
430 misses += 1
/home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/site-packages/django/core/urlresolvers.py in get_callable(lookup_view, can_fail)
116 raise ViewDoesNotExist(
117 "Could not import %s. View does not exist in module %s." %
--> 118 (lookup_view, mod_name))
119 return lookup_view
120
ViewDoesNotExist: Could not import auth_lifecycle.view__profile.get_rendered. View does not exist in module auth_lifecycle.view__profile.
[1]中的:导入身份验证生命周期视图配置文件
---------------------------------------------------------------------------
ViewDoesNotExist回溯(最近一次调用上次)
在()
---->1导入验证\u生命周期。查看\u配置文件
/home/jeffy/django_files/django_auth_lifecycle/auth_lifecycle/view_profile.py in()
19#创建登录视图后,将其更改为“登录”:
20配置文件\u已注销\u重定向\u URL\u NAME='main\u页面'
--->21反向(“主页面”)
22@login\u必需(login\u url=)http://usatoday.com')
23#@需要登录(登录url=reverse(配置文件#已登录#退出#重定向(url)名称))
/home/jeffy/django_files/django_auth_lifecycle\u venv/lib/python3.4/site-packages/django/core/urlresolvers.py(视图名、urlconf、args、kwargs、前缀、当前_应用程序)
544冲突解决程序=获取冲突解决程序(ns模式,冲突解决程序)
545
-->546将iri_返回到_uri(解析器。使用_前缀(视图、前缀、*args、**kwargs))反向_)
547
548反向_lazy=lazy(反向,str)
/home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/site-packages/django/core/urlresolvers.py in_reverse_带有前缀(self、lookup_view、_prefix、*args、**kwargs)
408
409如果不是自己填写的:
-->410自
411
412试试:
/home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/site-packages/django/core/urlresolvers.py in_populate(self)
290其他:
291 parent_pat=pattern.regex.pattern
-->292对于模式中的名称。反向命令:
293对于匹配项,pat,模式中的默认值。反向dict.getlist(名称):
294新匹配=规范化(父匹配+父匹配)
/home/jeffy/django_files/django_auth_lifecycle\u venv/lib/python3.4/site-packages/django/core/urlresolvers.py,反向输入(self)
313语言代码=获取语言()
314如果语言代码不在self中,则相反:
-->315自
316返回自我。反向指令[语言代码]
317
/home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/site-packages/django/core/urlresolvers.py in_populate(self)
301其他:
302位=规格化(p_模式)
-->303查找.appendlist(pattern.callback,(bits,p_pattern,pattern.default_args))
304如果pattern.name不是None:
305查找.appendlist(pattern.name,(bits,p_pattern,pattern.default_args))
/回调中的home/jeffy/django_files/django_auth_lifecycle\u venv/lib/python3.4/site-packages/django/core/urlresolvers.py(self)
229返回自我。\u回调
230
-->231 self.\u callback=get\u callable(self.\u callback\u str)
232返回自我。\u回调
233
/包装中的home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/functools.py(*args,**kwds)
426次点击+=1
427返回结果
-->428结果=用户函数(*args,**kwds)
429缓存[键]=结果
430次未命中+=1
/home/jeffy/django_files/django_auth_lifecycle_venv/lib/python3.4/site-packages/django/core/urlresolvers.py可调用(查找视图,可能失败)
116.提出观点,提出论点(
117“无法导入%s。模块%s中不存在视图”。%
-->118(查找视图、模块名称))
119返回查找视图
120
ViewDoesNotExist:无法导入验证生命周期。查看配置文件。获取渲染。视图在模块身份验证生命周期中不存在。视图配置文件。
更改以修复它
from django.contrib.auth.decorators import login_required
from django.core.urlresolvers import reverse_lazy
from django.shortcuts import render
from django.template import RequestContext
@login_required(login_url=reverse_lazy('main_page'))
def get_rendered(request):
return render(request, 'auth_lifecycle/user_profile.html',
context_instance=RequestContext(request))
仅导入视图文件意味着URL尚未加载<代码>反向要求URL已加载<代码>反向_lazy没有