Skip to main content
 首页 » 编程设计

python之Django 如何从 TemplateView 中找到正确的模板变量

2024年09月03日30findumars

我有这段代码:

# newspaper_project/urls.py 
 
from django.contrib import admin 
from django.urls import path, include 
from django.views.generic.base import TemplateView 
 
urlpatterns = [ 
    path('', TemplateView.as_view(template_name='home.html'), name='home'), 
    path('admin/', admin.site.urls), 
    path('users/', include('users.urls')) 
    path('users/', include('django.contrib.auth.urls')), 
] 
# users/urls.py 
from django.urls import path 
from . import views 
 
urlpatterns = [ 
    path('signup/', views.SignUp.as_view(), name='signup'), 
] 
# users/views.py 
from django.urls import reverse_lazy 
from django.views import generic 
from .forms import CustomUserCreationForm 
 
    class SignUp(generic.CreateView): 
        form_class = CustomUserCreationForm 
        success_url = reverse_lazy('login') 
        template_name = 'signup.html' 
<!-- templates/home.html --> 
{% block title %}Home{% endblock %} 
{% block content %} 
    {% if user.is_authenticated %} 
        Hi {{ user.username }}! 
        <p><a href="{% url 'logout' %}">logout</a></p> 
    {% else %} 
        <p>You are not logged in</p> 
        <a href="{% url 'login' %}">login</a> | 
        <a href="{% url 'signup' %}">signup</a> 
    {% endif %} 
{% endblock %} 

我的问题是: Django 如何知道 home.html 模板中使用的是什么模型? (Django 如何知道“用户名”?)

在 TemplateView 中,我没有指定模型(在本例中为 CustomUser)。当我们想要访问和呈现数据库数据时,我们需要在 View 中指定 Model 类(或在本例中为 Form)。从这里 Django 访问模板变量。不是吗?

请您参考如下方法:

在您的 TEMPLATES 设置中,您有 auth context processor启用。

TEMPLATES = [ 
    { 
        'BACKEND': 'django.template.backends.django.DjangoTemplates', 
        'DIRS': [], 
        'APP_DIRS': True, 
        'OPTIONS': { 
            'context_processors': [ 
                'django.template.context_processors.debug', 
                'django.template.context_processors.request', 
                'django.contrib.auth.context_processors.auth', 
                'django.contrib.messages.context_processors.messages', 
            ], 
        }, 
    }, 
] 

这会将 user(当前登录的用户或未登录的匿名用户)和 perms(存储用户的权限)添加到模板上下文。