簡體   English   中英

Django上下文處理器登錄問題

[英]Django Context Processor Login In Issue

我有一個登錄系統:

def login(request):
title = "Login"
if request.user.is_authenticated():
    return HttpResponseRedirect('/')
form = UserLoginForm(request.POST or None)
if request.POST and form.is_valid():
    username = form.cleaned_data.get('username')
    password = form.cleaned_data.get('password')
    user = auth.authenticate(username=username, password=password)
    if user:
        auth.login(request, user)
    return HttpResponseRedirect("/")# Redirect to a success page.
return render(request, 'accounts/login.html', {'title':title, 'form': form })


def logout(request):
    auth.logout(request)
    return HttpResponseRedirect('/accounts/login')

而且效果很好。 但是,當我嘗試添加一個context_processor它停止工作並給出以下錯誤:

Environment:


Request Method: GET
Request URL: http://localhost:8000/accounts/login/

Traceback:

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/exception.py" in inner
  39.             response = get_response(request)

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  187.                 response = self.process_exception_by_middleware(e, request)

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/core/handlers/base.py" in _get_response
  185.                 response = wrapped_callback(request, *callback_args, **callback_kwargs)

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
  149.                     response = view_func(request, *args, **kwargs)

File "/Users/andyxu/Documents/ece496-web/capstone/views.py" in login
  22.     return render(request, 'accounts/login.html', {'title':title, 'form': form })

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/shortcuts.py" in render
  30.     content = loader.render_to_string(template_name, context, request, using=using)

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/template/loader.py" in render_to_string
  68.     return template.render(context, request)

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/template/backends/django.py" in render
  66.             return self.template.render(context)

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/template/base.py" in render
  206.                 with context.bind_template(self):

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/contextlib.py" in __enter__
  17.             return self.gen.next()

File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/django/template/context.py" in bind_template
  236.             updates.update(processor(self.request))

Exception Type: TypeError at /accounts/login/
Exception Value: 'NoneType' object is not iterable

這是我的context_processor.py:

from matchalgorithm.models import Profile

def add_variable_to_context(request):
    if(request.user.id):
        profile = Profile.objects.filter(user_id = request.user.id).first()
    return {
        'main_profile': profile
    }

基本上,我只想檢查用戶是否有Profile否則返回None 我想使用此變量傳遞到我的base.html ,該視圖不會由任何視圖呈現。 有趣的是,一旦我logged in ,它就可以正常工作!

謝謝

您的上下文處理器上的縮進似乎已關閉,它與您的描述不符。 我假設return語句在if語句內,因為它與您的描述和回溯都匹配。

文檔說(重點是我的):

上下文處理器具有一個非常簡單的接口:這是一個Python函數,它接受一個參數,一個HttpRequest對象,並返回添加到模板上下文的字典。 每個上下文處理器必須返回一個字典。

因此,如果您不想在上下文中添加任何內容,則處理器必須返回一個空字典,而不是None

def add_variable_to_context(request):
    if(request.user.id):
        profile = Profile.objects.filter(user_id = request.user.id).first()
        return {
            'main_profile': profile
        }
    return {}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM