請注意,我是Django的新手。我創建了一個簡單的配置模型,我想用它在我的網站上設置一些全局設置。現在我創建了一個主題切換設置來替換主要的css文件,但我無法將它加載到我的登錄模板上。雖然在索引上工作得很好。請協助!Django視圖不返回模型到模板
瀏覽:
from django.shortcuts import render, HttpResponseRedirect
from django.contrib.auth.decorators import login_required
from django.contrib.auth import login, logout
from .forms import LoginForm
from .models import Configuration
def get_theme():
theme_name = Configuration.objects.only('theme_name').get().theme_name
context = {'theme_name': theme_name}
return context
def login_view(request):
form = LoginForm(request.POST or None)
if request.POST and form.is_valid():
user = form.login(request)
if user:
login(request, user)
return HttpResponseRedirect('index') # Redirect to a success page.
theme_name = get_theme()
context = theme_name.update({'login_form': form})
return render(request, 'registration/login.html', context)
def logout_user(request):
logout(request)
return HttpResponseRedirect('registration/login.html')
@login_required(login_url='login/')
def index(request):
theme_name = get_theme()
return render(request, 'base.html', theme_name)
模板上的login.html:在base.html文件(工作)
{% compress css %}
<link href="{% static 'base/css/style-'%}{{ theme_name }}.css" rel="stylesheet" type="text/css">
{% endcompress %}
模板:
{% compress css %}
<link href="{% static 'base/css/style-'%}{{ theme_name }}.css" rel="stylesheet" type="text/css">
<link href="{% static 'base/css/sidebar-menu.css' %}" rel="stylesheet" type="text/css">
{% endcompress %}
注意:我沒有在我的登錄頁面上加載Base.html,因爲用戶在base.html上看到任何內容之前需要先登錄。如果我這樣做的方式不對,請告訴我。
非常感謝您的幫助。
編輯爲forms.py:
class LoginForm(forms.Form):
username = forms.CharField(max_length=255, required=True)
password = forms.CharField(widget=forms.PasswordInput, required=True)
def clean(self):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
user = authenticate(username=username, password=password)
if not user or not user.is_active:
raise forms.ValidationError("Sorry, that login was invalid. Please try again.")
return self.cleaned_data
def login(self, request):
username = self.cleaned_data.get('username')
password = self.cleaned_data.get('password')
user = authenticate(username=username, password=password)
return user
@ justin-boucher這是一個非常好的主意。 – Brandon
它看起來像個好主意。但這是我的第一個項目,我承認我不知道自己在做什麼。我不知道如何添加上下文處理器。 –
@JustinBoucher - 這就是你所需要的......把這個方法放在某個地方,然後將它添加到你的設置中的上下文處理器列表中......例如''myapp.wherever.theme_name_processor'',那麼它可以在任何地方使用,而無需在任何視圖中添加它 – Sayse