如何将附加上下文传递到基于类的视图 (Django) 中?
一旦您知道要注意什么,就可以轻松地将上下文从基于类的视图传递到您的模板中。有两种方法可以做到——一种涉及 get_context_data,另一种是通过修改 extra_context 变量。让我们看看如何一一使用这两种方法。
解释:
使用示例说明如何使用 get_context_data 方法和 extra_context 变量将上下文传递到模板中。考虑一个名为 geeksforgeeks 的项目,它有一个名为 geeks 的应用程序。
Refer to the following articles to check how to create a project and an app in django.
How to Create Basic Project using MVT in Django?
How to Create an App in Django ?
方法 1 :使用 get_context_data 方法
在 models.py 中添加以下代码:
Python3
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
HTML
Intro
All users name
{% for user in users %}
{{user.first_name}}
{% endfor %}
Python3
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
Python3
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")
]
Python3
from django.views.generic.base import TemplateView
from .models import YourModel
class Intro(TemplateView):
template_name = 'Intro.html'
extra_context={'users': YourModel.objects.all()}
创建此模型后,我们需要运行两个命令才能为其创建数据库。
python manage.py makemigrations
python manage.py migrate
在 app directory(geeks) 中创建名为 templates 的文件夹,在该文件夹中添加名为 Intro.html 的文件并添加以下代码:
HTML
Intro
All users name
{% for user in users %}
{{user.first_name}}
{% endfor %}
在 views.py 文件中添加以下代码:
蟒蛇3
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 文件中添加以下代码:
蟒蛇3
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 fle:
蟒蛇3
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://loaclhost:8000/ 上有什么,在此之前不要忘记向您的模型添加一些数据。
How to add data to your model
Django ORM – Inserting, Updating & Deleting Data