python - Django - 表单未显示在模板上,仅显示按钮

标签 python django forms templates django-forms

我已经尝试了一切,但我不明白为什么它没有出现。我在这个网站上到处搜索但没有运气。该按钮显示了,但是当我单击时,它在 get_profile 处给我一个 TypeError,说:

异常值:
get_profile() 收到意外的关键字参数“用户名”

这是我的代码:

模型.py

class CustomUser(AbstractBaseUser):
    email = models.EmailField('email address', unique=True, db_index=True)
    username = models.CharField('username', max_length=50, unique=True, db_index=True)
    first_name = models.CharField(max_length=50, blank=False)
    last_name = models.CharField(max_length=50, blank=False)
    joined = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)
    is_admin = models.BooleanField(default=False)
    date_joined = models.DateTimeField(_('date joined'), default=timezone.now)

    USERNAME_FIELD = 'username'
    REQUIRED_FIELDS = []

    objects = CustomUserManager()

    def __unicode__(self):
        return self.username

表单.py

from django import forms
from apps.accounts.models import CustomUser


class RegistrationForm(forms.ModelForm):
    email = forms.EmailField(widget=forms.TextInput, label='email')
    username = forms.CharField(widget=forms.TextInput, label='username')
    password1 = forms.CharField(widget=forms.PasswordInput, label='Enter your password')
    password2 = forms.CharField(widget=forms.PasswordInput, label='Re-type your password')
    first_name = forms.CharField(widget=forms.TextInput, label='First Name')
    last_name = forms.CharField(widget=forms.TextInput, label='Last Name')

    class Meta:
        model = CustomUser
        fields = ['email', 'username', 'password1', 'password2', 'first_name', 'last_name']

    def clean(self, password1, password2):
        cleaned_data = super(RegistrationForm, self).clean()
        if password1 in self.cleaned_data and password2 in self.cleaned_data:
            if self.cleaned_data['password1'] != self.cleaned_data['password2']:
                raise forms.ValidationError("Passwords don't match. Please enter both fields again")
        return self.cleaned_data

    def save(self, commit=True):
        user = super(RegistrationForm, self).save(commit=False)
        user.set_password(self.cleaned_data['password1'])
        if commit:
            user.save()
        return user

View .py

def register(request):
    """
    User Registration View
    """
    if request.method == 'POST':
        form = RegistrationForm(request.POST)
        if form.is_valid():
            CustomUser = form.save()
            CustomUser.save()
            return redirect('home.html')
    else:
        form = RegistrationForm()
    return render_to_response('register.html', {
        'form': form,
    }, context_instance=RequestContext(request))

def get_profile(request):
    username = CustomUser.username
    return render_to_response(request, 'profile.html', {'username': username})

url.py

urlpatterns = patterns ('', 
    url(r'register$', 'apps.accounts.views.register', name='register'),)

注册.html

{% load staticfiles %}
{% load crispy_forms_tags %}

<!DOCTYPE html>
<html lang="en">
<body>
{% block body %}

<form method='POST' action="register" enctype= 'multipart/form-data'>{% csrf_token %}
<table>{{ form.ast_table}}</table>
<input type='submit' class="btn btn-default" value="Register" />
</form>
{% endblock %}
</body>
</html>

最佳答案

您似乎没有 get_profile View 函数的正确签名。

您应该检查您的网址,您可能有类似的内容

url(r'^profile/(?P<username>\w+/$', get_profile),

如果是这样,您的观点应该是

def get_profile(request, username):
    #you can get the user
    user = CustomUser.objects.get(username=username)

    return render_to_response(request, 'profile.html', {'username': username, 'user': user}) 

关于python - Django - 表单未显示在模板上,仅显示按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36685574/

相关文章:

python - 将 None 对象属性打印为空字符串

javascript - Django Form - 使用 JQuery 条件字段显示

python - django - 获取名称为动态的字段

javascript - 如何验证 HTML 表单?

javascript - 将电子邮件从多个电子邮件表单发送到多个电子邮件地址

python - 列表列表到 numpy 数组中

python - 带有 C 文件的 AWS Lambda 部署包

python - python计算梯度错误?

django - 如何更改模型标签并为其指定自定义名称

javascript - 如何使用 JavaScript 返回多个搜索查询