Django视图未将模型返回到模板
请注意,我是Django的新手。我创建了一个简单的配置模型,我想用它在我的站点上设置一些全局设置。现在,我只创建了一个主题切换设置来替换主css文件,但我无法将其加载到我的登录模板中。不过在索引上效果很好。请协助 视图:Django视图未将模型返回到模板,django,django-templates,django-views,Django,Django Templates,Django Views,请注意,我是Django的新手。我创建了一个简单的配置模型,我想用它在我的站点上设置一些全局设置。现在,我只创建了一个主题切换设置来替换主css文件,但我无法将其加载到我的登录模板中。不过在索引上效果很好。请协助 视图: from django.shortcuts import render, HttpResponseRedirect from django.contrib.auth.decorators import login_required from django.contrib.aut
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)
{% 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 %}
登录时的模板。html:
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)
{% 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 %}
在
登录视图
中传递给模板的上下文词典中缺少主题名称
。您正在传递:{'login\u form':form}
您可以使用附加数据扩展get_theme()
提供的字典,反之亦然,或者您也可以从这两个数据中创建一个新字典,并将其传递给模板
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)
在
登录视图
中传递给模板的上下文词典中缺少主题名称
。您正在传递:{'login\u form':form}
您可以使用附加数据扩展get_theme()
提供的字典,反之亦然,或者您也可以从这两个数据中创建一个新字典,并将其传递给模板
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)
你没有正确传递主题。它需要与表单位于同一词典中
return render(request, 'registration/login.html', {'login_form': form, 'theme_name': theme_name})
你没有正确传递主题。它需要与表单位于同一词典中
return render(request, 'registration/login.html', {'login_form': form, 'theme_name': theme_name})
当您将主题错误地传递到上下文中时,您似乎打算在每个视图中都包含该主题,因此最好将其添加为上下文处理器
def theme_name_processor(request):
theme_name = Configuration.objects.only('theme_name').get().theme_name
context = {'theme_name': theme_name}
return context
然后在设置中的上下文处理器列表中添加对此的引用
请参见当您将主题错误地传递到上下文中时,您似乎打算在每个视图中都包含该主题,因此最好将其添加为上下文处理器
def theme_name_processor(request):
theme_name = Configuration.objects.only('theme_name').get().theme_name
context = {'theme_name': theme_name}
return context
然后在设置中的上下文处理器列表中添加对此的引用
请参见+1-theme\u将其命名为字典,可能需要更改
get\u-theme
方法,以便更准确地执行它所说的操作+1-theme\u将其命名为字典,get\u theme
方法可能应该用它来更改,以便更准确地执行它所说的操作是的……仍然丢失。我试图修改我的视图以匹配上面的视图,但显然我仍然缺少一些东西。我需要修改forms.py文件吗?我看不到。我对答案做了一点微调,分配了一个新变量,context
,然后将其传递给模板。你确定你有theme\u name
的值吗?是的……它正确地传递给了我的索引,而不是login.html。我会用我的表格更新原始问题。我不知道为什么它不起作用。我可以告诉你的是,render
函数的签名是:请求(对象)、模板(字符串)、上下文(字典)是……仍然丢失。我试图修改我的视图以匹配上面的视图,但显然我仍然缺少一些东西。我需要修改forms.py文件吗?我看不到。我对答案做了一点微调,分配了一个新变量,context
,然后将其传递给模板。你确定你有theme\u name
的值吗?是的……它正确地传递给了我的索引,而不是login.html。我会用我的表格更新原始问题。我不知道为什么它不起作用。我可以告诉你的是,render
函数的签名是:请求(对象)、模板(字符串)、上下文(字典)。这看起来是个好主意。但这是我的第一个项目,我承认我不知道我在做什么。我还不知道如何添加上下文处理器。@JustinBoucher-这就是您所需要的全部。。。将此方法放在某个位置,然后将其添加到设置中的上下文处理器列表中。。。i、 e'myapp.where.theme\u name\u processor'
,那么它就可以在任何地方使用,而无需在任何视图中添加它来获取更多信息。这看起来是个好主意。但这是我的第一个项目,我承认我不知道我在做什么。我还不知道如何添加上下文处理器。@JustinBoucher-这就是您所需要的全部。。。将此方法放在某个位置,然后将其添加到设置中的上下文处理器列表中。。。i、 e“myapp.where.theme\u name\u processor”
,则无需将其添加到任何视图中即可在任何位置使用,以获取更多信息