Django的render()函数用于从给定的数据渲染一个模板并返回一个HttpResponse对象,其语法如下:
render(request, template_name, context=None, content_type=None, status=None, using=None)
- request:HttpRequest对象,表示来自客户端的请求。
- template_name:要使用的模板名称,可以是文件名字符串、文件名列表或者是一个可调用的对象。如果给定名称不包含任何“/”,那么默认搜索的是app目录内的templates目录。
- context:可选的上下文数据字典,它包含将要被渲染的模板所需的数据。如果不提供该参数,将自动提取与视图函数所绑定的上下文。
- content_type:可选的MIME类型,默认为”text/html”。
- status:可选的HTTP响应状态码,默认为200。
- using:可选的数据库路由别名,默认为None。
下面提供两个使用render()函数的实例:
实例1:使用render()函数渲染模板并返回HttpResponse对象
# views.py
from django.shortcuts import render
def hello_view(request):
return render(request, 'hello.html', {'name': 'World'})
# hello.html
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Hello</title>
</head>
<body>
<h1>Hello, {{ name }}!</h1>
</body>
</html>
在上面的例子中,hello_view()函数接受来自客户端的请求并使用render()函数渲染名为“hello.html”的模板。模板接受一个名为”name”的上下文变量并将其输出为页面中的”Greetings, World!”。最后,该视图函数返回渲染后的HttpResponse对象,将该响应发送回客户端。
实例2:使用render()函数在Django Admin中自定义模板
# admin.py
from django.contrib import admin
from django.urls import reverse
from django.utils.html import format_html
from django.shortcuts import render
from .models import Product
class ProductAdmin(admin.ModelAdmin):
list_display = ('name', 'description', 'view_on_site')
def view_on_site(self, obj):
url = reverse('product_detail', args=[obj.pk])
return format_html('<a href="{}">View on site</a>', url)
def change_view(self, request, object_id, form_url='', extra_context=None):
product = Product.objects.get(pk=object_id)
related_products = product.related_products.all()
context = {'related_products': related_products}
return render(request, 'change_view.html', context)
# change_view.html
{% extends "admin/change_form.html" %}
{% block object-tools %}
{{ block.super }}
<a href="{% url 'product_detail' object_id %}" class="button">View on site</a>
{% endblock %}
{% block after_field_sets %}
<h3>Related Products:</h3>
<ul>
{% for related_product in related_products %}
<li><a href="{% url 'admin:store_product_change' related_product.id %}">{{ related_product.name }}</a></li>
{% endfor %}
</ul>
{% endblock %}
在上面的例子中,我们使用render()函数自定义了ProductAdmin的改变视图。在视图更改时,我们将数据从数据库中检索出来,然后渲染名为”change_view.html”的模板,该模板继承自Django Admin的默认change_form.html,并允许我们在相关产品下面显示相关产品的列表,以供更好的参考。最后,该视图函数使用render()函数渲染了该模板,返回渲染后的HttpResponse对象,将其发送给客户端。
以上就是Django的render()函数的作用与使用方法的攻略。这个函数是Django中非常常用的一个函数,理解该函数的使用方法可以帮助我们更好地构建Django应用。