TemplateResponseMixin 需要“template_name”的定义或“get_template_names()”的实现

Ahm*_*gdi 9 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
Run Code Online (Sandbox Code Playgroud)

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': '????? ???? ??????'
        }
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

最后,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 %}
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

ImproperlyConfigured at /signup/
TemplateResponseMixin requires either a definition of 'template_name' or an implementation of 'get_template_names()'
Run Code Online (Sandbox Code Playgroud)

小智 2

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