导致ViewDoesNotExis的装饰视图

2024-06-12 04:48:29 发布

您现在位置:Python中文网/ 问答频道 /正文

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_required装饰器的注释

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: Could not import auth_lifecycle.view__profile.get_rendered. View does not exist in module auth_lifecycle.view__profile.

为什么?你知道吗


完全回溯:

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.

Tags: djangoinpycoreimportselfauthview
1条回答
网友
1楼 · 发布于 2024-06-12 04:48:29

^{}更改为^{}可以修复它。你知道吗

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。reverse要求已加载URL。reverse_lazy没有。你知道吗

相关问题 更多 >