如何将jinja2变量设置为另一个变量的值

时间:2018-02-14 01:10:01

标签: python django django-forms jinja2

{% set form.username = user.get_username %}我希望 form.username 等于用户的用户名,因此在发送表单时,我知道是谁发送的。但是,它会引发错误:" 您是否忘记注册或加载此标记?"

如果我用{{forms.username}}代替这一行,它就可以了,但是用户必须自己填写表格,无论他想要什么,允许他提交一个不是他的用户名的文件。 / p>

file.html (包含在home.html中):

<form method="post" enctype="multipart/form-data">
{% csrf_token %}
{% set form.username = user.get_username %}
{{ form.file }}
<button type="submit">Upload</button>

views.py:

from django.shortcuts import render
from django.conf import settings
from django.core.files.storage import FileSystemStorage

from data.models import UserData
from data.forms import UserDataForm

def model_form_upload(request):
    if request.method == 'POST':
        form = UserDataForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()

    else:
        form = UserDataForm()
    return render(request, 'data/ranking_index.html', {
        'form': form
    })

models.py:

from django.db import models

class UserData(models.Model):
    username = models.CharField(max_length=40)
    file = models.FileField(upload_to='userdata/')
    uploaded_at = models.DateTimeField(auto_now_add=True)

forms.py:

from django import forms

from data.models import UserData

class UserDataForm(forms.ModelForm):
    class Meta:
        model = UserData
        fields = ('username', 'file', )

1 个答案:

答案 0 :(得分:1)

渲染模板时未包含user。因此,jinja2无法找到user的值。我建议如下。

return render(request, '<your template>', {
    'form': form
    'user': user
})

您需要在同一个函数中创建此user对象,或者从其创建的其他位置导入。希望这有帮助!