Django如何向基于类的视图传递额外的上下文
一旦你知道要注意什么,将上下文从基于类的视图传递到你的模板中是很容易的。有两种方法可以做到这一点–一种是get_context_data,另一种是通过修改extra_context变量。让我们看看如何逐一使用这两种方法。
解释:
用一个例子说明如何使用get_context_data方法和extra_context变量将上下文传递给你的模板。考虑一个名为geeksforgeeks的项目,它有一个名为geeks的应用程序。
方法1 :使用get_context_data方法
在models.py里面添加以下代码。
from django.db import models
# Create your models here.
class YourModel(models.Model):
first_name = models.CharField(max_length=30)
last_name = models.CharField(max_length=30)
def __str__(self):
return self.first_name
创建这个模型后,我们需要运行两个命令,以便为其创建数据库。
python manage.py makemigrations
python manage.py migrate
在应用程序目录(geeks)中创建名为templates的文件夹,在该文件夹中添加名为Intro.html的文件并添加以下代码。
<!-- Intro.html -->
<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<title>Intro</title>
</head>
<body>
<h1>All users name </h1>
{% for user in users %}
{{user.first_name}}
{% endfor %}
</body>
</html>
在views.py文件中加入以下代码。
from django.views.generic.base import TemplateView
from .models import YourModel
class Intro(TemplateView):
template_name = 'Intro.html'
def get_context_data(self,*args, **kwargs):
context = super(Intro, self).get_context_data(*args,**kwargs)
context['users'] = YourModel.objects.all()
return context
在名为geeksforgeeks的项目的urls.py文件中添加以下代码。
from django.contrib import admin
from django.urls import path
from geeks.views import Intro
urlpatterns = [
path('admin/', admin.site.urls),
path('',Intro.as_view(),name="intro")
]
方法2:使用extra_context变量
重写views.py的flle,加入以下代码。
from django.views.generic.base import TemplateView
from .models import YourModel
class Intro(TemplateView):
template_name = 'Intro.html'
extra_context={'users': YourModel.objects.all()}
通过这两种方法,你会看到相同的输出。让我们检查一下http://localhost:8000/,在这之前,不要忘记给你的模型添加一些数据。
How to add data to your model
Django ORM – Inserting, Updating & Deleting Data