📌  相关文章
📜  如何将附加上下文传递到基于类的视图 (Django) 中?

📅  最后修改于: 2022-05-13 01:54:40.335000             🧑  作者: Mango

如何将附加上下文传递到基于类的视图 (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

输出 -