Django - 将表单导入app外的模板

时间:2013-10-15 17:12:52

标签: python django django-forms django-templates django-views

我有一个名为account的应用,其中包含用于注册和登录用户的所有模型,视图和表单。
我有一个模板位于app文件夹之外,假设包含帐户应用程序中的所有表单。
我在尝试获取模板中显示的表单时遇到问题 有人能帮帮我吗? 以下是一些代码片段:

占/ forms.py

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.forms import UserCreationForm

# Safe from injection, etc.
class UserRegistrationForm(UserCreationForm):
    email = forms.EmailField(required = True)
    first_name = forms.CharField(max_length=30, required=True)
    last_name = forms.CharField(max_length=30, required=True)

    class Meta:
        model = User
        fields = ('username','email','password1', 'password2','first_name','last_name')

    def save(self, commit=True):
        user = super(UserRegistrationForm, self).save(commit=False)
        user.email = self.cleaned_data['email']
        user.first_name = self.cleaned_data['first_name']
        user.last_name = self.cleaned_data['last_name']
        if commit:
            user.save()

        return user

占/ view.py

from forms import UserRegistrationForm
def register_user(request):
    if request.POST:
        form = UserRegistrationForm(request.POST)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/accounts/register_success')
    else:
        form = UserRegistrationForm()
    args = {}
    # prevent forgery
    args.update(csrf(request))

    # empty form
    args['form'] = form
    return render_to_response('signup.html', args)

def register_success(request):
    return render_to_response('signup_success.html')

最后是模板,它不在帐户文件夹中。它与settings.py

位于同一文件夹中

signup.html

{% extends "base.html" %}

{% block content %}

<form action="" method="post"> {% csrf_token %}
    <ul>
        {{accounts.form.as_ul}}
    </ul>

    <input type="submit" name="submit" value="Register">
</form>

{% endblock %}

更新

获得从项目经理移动模板的权限后,我将其移至帐户/模板,并将渲染更改为响应地址。 我现在有新的形式没有提交的问题。 天啊正在发生什么?

3 个答案:

答案 0 :(得分:0)

模板不应与settings.py位于同一目录中。

它应位于帐户应用中的目录中:accounts/templates/signup/html

如果您已正确配置Django项目,那么Django应在重新启动Web服务器后获取模板。

答案 1 :(得分:0)

因为我看到你将form变量传递给模板, 但您正在尝试使用accounts.form

希望这有帮助。

答案 2 :(得分:0)

好的问题出在我的signup.html文件上。它应该有onclick脚本,表单应该有一个id。

{% extends "base.html" %}

{% block content %}

<form action="" method="post" id="form"> {% csrf_token %}
    <ul>
        {{accounts.form.as_ul}}
    </ul>

    <input type="submit" name="submit" value="Register" onclick="submit()">
</form>
<script>
    function submit() {document.forms["form"].submit();}
</script>
{% endblock %}