在 Django 中渲染无法传递参数

Render in django can't passing an argument

我是 django 的新手,我正在尝试创建一个应用程序,用户可以根据 his/her id 更改 his/her 密码。到目前为止还不错,但是当我试图从我的 views.py 传递一个参数时,有一个参数无法传递给 html 模板的问题。

这是我的看法:

def tambah_user(request, template_name='form_user.html'):
    if 'username' in request.session:
        username = User.objects.all()
        data = {}
        data['object_list'] = username
        if request.method == 'POST':
            user_form = UserForm(data=request.POST)
            profile_form = UserProfileForm(data=request.POST)

            if user_form.is_valid() and profile_form.is_valid():
                user = user_form.save()
                user.set_password(user.password)
                user.save()
                profile = profile_form.save(commit=False)
                profile.user = user
                profile.save()
                return redirect('manajemen_user')
            else:
                print user_form.errors, profile_form.errors
        else:
            user_form = UserForm()
            profile_form = UserProfileForm()

        return render(request, template_name,
                {'user_form': user_form, 'profile_form': profile_form, 'data': data},)
    else:
        return HttpResponseRedirect('/simofa/login')

使用该代码,data 无法传递到 html 模板。

当我像这样更改渲染时

return render(request, template_name,data)

它工作正常,但 user_form 和 profile_form 没有传递给模板。

我的问题:

  1. 我可以将 data, user_form, profile_form 一起传递给模板吗?
  2. 如果可以,怎么做?如果不行,还有其他办法吗?

非常感谢您的意见。所以请帮助我。谢谢^__^

render 语句不像定义元组时那样需要尾随逗号,这很可能是导致错误的原因,但是您的代码可以使用一些重构....

from django.contrib.auth.decorators import login_required
from django.contrib.auth.models import User
from django.core.urlresolvers import reverse
from django.http import HttpResponseRedirect

# assuming you're using your own form here for some reason...
from .forms import UserForm

# use the login_required decorator instead of manually checking for the session
@login_required
def tambah_user(request, template_name='form_user.html'):
    # `users` just makes more sense here for the variable name
    users = User.objects.all()

    # no need for the extra if clause to create unbound forms
    user_form = UserForm(request.POST or None)
    profile_form = UserProfileForm(request.POST or None)

    if request.method == 'POST':
        if user_form.is_valid() and profile_form.is_valid():
            user = user_form.save()

            # you need to pass in the raw password here,
            # otherwise you're hashing the already hashed password
            # if you were to be editing an instance
            user.set_password(user_form.cleaned_data('password'))
            user.save()
            profile = profile_form.save(commit=False)
            profile.user = user
            profile.save()

            # you need to use reverse by name to do this
            return redirect(reverse('manajemen_user'))
        else:
            print user_form.errors, profile_form.errors

    # notice I have omitted the trailing comma after the context
    # dictionary
    return render(request, template_name, {'user_form': user_form,
        'profile_form': profile_form, 'data': users})

我希望你已经阅读了 Django 中的 documentation for authentication,因为有内置的表单和视图可以为用户做几乎所有你需要做的事情,而不是你自己写。