3.4.template与views的交互

一、模板展示views中提供的数据

views中通过context返回对象

message/views.py

from django.shortcuts import render

from message.models import UserMessage


def form_view(request):
    message = None
    all_messages = UserMessage.objects.all()
    if all_messages:
        message = all_messages[0]

    return render(request, 'message.html', {
        'my_message': message,
    })

template中通过插值表达式绑定数据

插值表达式:

templates/message.html

<input id="name" type="text" name="name" class="error" value="{{ my_message.name }}" placeholder="请输入您的姓名"/>

二、模板提交数据到views

模板通过表单提交数据到views对应的url

<form action="/form/" ...>

templates/message.html

<form action="/form/" method="post" class="smart-green">
    ...
    {% csrf_token %}
</form>

注意:

url前后都需要添加“/”,如示例中:action="/form/"

是必须的,否则无法通过django的安全校验

views中接收数据

message/views.py

from django.shortcuts import render

from message.models import UserMessage


def form_view(request):
    if request.method == 'POST':
        name = request.POST.get('name')
        email = request.POST.get('email')
        address = request.POST.get('address')
        message = request.POST.get('message')

        user_message = UserMessage()
        user_message.name = name
        user_message.email = email
        user_message.address = address
        user_message.message = message
        user_message.object_id = 4
        user_message.save()

    return render(request, 'message.html')

Last updated

Was this helpful?