TemplateResponseMixin需要'template_name'的定义或'get_template_names()'

时间:2018-06-03 20:23:14

标签: python django

我在Django中创建了一个自定义用户模型,一切都很顺利,但是当我尝试创建一个新用户时,它给了我一个错误

这是我的档案:

首先我的 models.py 我在哪里创建了用户表

class UserModelManager(BaseUserManager):
    def create_user(self, email, password, pseudo):
        user = self.model()
        user.name = name
        user.email = self.normalize_email(email=email)
        user.set_password(password)
        user.save()

        return user

    def create_superuser(self, email, password):
        '''
        Used for: python manage.py createsuperuser
        '''
        user = self.model()
        user.name = 'admin-yeah'
        user.email = self.normalize_email(email=email)
        user.set_password(password)

        user.is_staff = True
        user.is_superuser = True
        user.save()

        return user


class UserModel(AbstractBaseUser, PermissionsMixin):
    ## Personnal fields.
    email = models.EmailField(max_length=254, unique=True)
    name = models.CharField(max_length=16)
    ## [...]

    ## Django manage fields.
    date_joined = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELD = ['email', 'name']

    objects = UserModelManager()

    def __str__(self):
        return self.email

    def get_short_name(self):
        return self.name[:2].upper()

    def get_full_name(self):
        return self.name

这里是我创建注册表单的 forms.py

class SignUpForm(UserCreationForm):
    email = forms.CharField(required=True, help_text='البريد الإلكترونى الخاص بك - يجب ان يكون حقيقى (يستخدم لتسجيل الدخول) ')
    name = forms.CharField(required=True, help_text='إسمك الحقيقى -  سيظهر كأسم البائع')
    password1 = forms.CharField(widget=forms.PasswordInput,
                                help_text='كلمة المرور - حاول ان تكون سهلة التذكر بالنسبة لك')
    password2 = forms.CharField(widget=forms.PasswordInput,
                                help_text='تأكيد كلمة المرور - إكتب نفس كلمة المرور السابقة مرة أخرى')

    class Meta:
        model = UserModel
        fields = ('email','name',  'password1', 'password2', )
        labels = {
            'name': 'إسمك الحقيقى -  سيظهر كأسم البائع',
            'email': 'البربد الإلكترونى Email',
            'password1': 'كلمة المرور',
            'password2': 'تأكيد كلمة المرور'
        }

然后是查看注册模板的 Views.py

def signup(request):
    if request.method == 'POST':
        signup_form = SignUpForm(request.POST)
        if signup_form.is_valid():
            signup_form.save()
            username = signup_form.cleaned_data.get('username')
            raw_password = signup_form.cleaned_data.get('password1')
            user = authenticate(username=username, password=raw_password)
            login(request, user)
            return redirect('signup_confirm')
    else:
        signup_form = SignUpForm()

    context = {
        'signup_form': signup_form,
    }
    return render(request, 'fostania_web_app/signup.html', context)

最后,模板本身在哪里使用 signup.html

{% extends 'fostania_web_app/base.html' %}
{% block content %}
{% load static %}
    <br>
    <br>
    <div align="center">
    <div class="card border-primary mb-3" style="max-width: 40rem;" align="center">
  <div class="card-header">إنشاء حساب جديد</div>
  <div class="card-body text-dark">
    <h5 class="card-title">
        <img src="{% static 'img/add_user_big.png' %}">
    </h5>
    <p class="card-text">                    {% if user.is_authenticated %}
                        <div align="center">
لقم قمت بتسجيل الدخول بالفعل <br>
                        يمكنك <a href = '{% url 'logout' %}'>

                        <button class="btn btn-danger" >تسجيل الخروج</button> </a> إذا كنت ترغب الدخول على حساب اخر
    </div>
                    {% else %}
          <form method="post" align="right">
    {% csrf_token %}
    {% for field in signup_form %}
      <p>
        {{ field.label_tag }}<br>
        {{ field }}<br>
          <font color="gray">{{ field.help_text }}</font>
        {% for error in field.errors %}
          <p style="color: red">{{ error }}</p>
        {% endfor %}
    {% endfor %}
          <br>
    <button type="submit" class="btn btn-success">تسجيــل</button><br>
  بالضغط على تسجيل انت توافق على شروط الإستخدام الخاصة بموقعنا !
  </form>
                        </div>
    {% endif %}
        </p>
  </div>
</div>

{% endblock %}

这就是错误的样子:

ImproperlyConfigured at /signup/
TemplateResponseMixin requires either a definition of 'template_name' or an implementation of 'get_template_names()'

1 个答案:

答案 0 :(得分:1)

我怀疑问题实际上出在您的 urls.py 中。如果您将 url 指向错误的视图(可能是您已关联到 /signup/ 路径的 CBV),则可能会导致此错误。