Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django视图未将模型返回到模板_Django_Django Templates_Django Views - Fatal编程技术网

Django视图未将模型返回到模板

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

请注意,我是Django的新手。我创建了一个简单的配置模型,我想用它在我的站点上设置一些全局设置。现在,我只创建了一个主题切换设置来替换主css文件,但我无法将其加载到我的登录模板中。不过在索引上效果很好。请协助

视图:

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”
,则无需将其添加到任何视图中即可在任何位置使用,以获取更多信息