代码之家  ›  专栏  ›  技术社区  ›  CAB

Django消息。成功行不通

  •  0
  • CAB  · 技术社区  · 7 年前

    我在表单中创建消息。py公司

    def clean(self):
        request = self.request
        data = self.cleaned_data
        email  = data.get("email")
        password  = data.get("password")
        qs = User.objects.filter(email=email)
        if qs.exists():
            # user email is registered, check active/
            not_active = qs.filter(is_active=False)
            if not_active.exists():
                ## not active, check email activation
                link = reverse("account:resend-activation")
                reconfirm_msg = """Go to <a href='{resend_link}'>
                resend confirmation email</a>.
                """.format(resend_link = link)
                confirm_email = EmailActivation.objects.filter(email=email)
                is_confirmable = confirm_email.confirmable().exists()
                if is_confirmable:
                    msg1 = "Please check your email to confirm your account or " + reconfirm_msg.lower()
                    raise forms.ValidationError(mark_safe(msg1))
                email_confirm_exists = EmailActivation.objects.email_exists(email).exists()
                if email_confirm_exists:
                    msg2 = "Email not confirmed. " + reconfirm_msg
                    raise forms.ValidationError(mark_safe(msg2))
                if not is_confirmable and not email_confirm_exists:
                    raise forms.ValidationError("This user is inactive.")
        user = authenticate(request, username=email, password=password)
        if user is None:
            raise forms.ValidationError("Invalid credentials")
        login(request, user)
        self.user = user
        return data
    

    当我使用简单的html时,它运行良好,并在屏幕上显示消息:

    {% block content %}
    <h1>Login</h1>
        <form method='POST'> {% csrf_token %}
          {{ form }}
          <button type='submit' class='btn btn-default'>Submit</button>
        </form>
    
    {% endblock %}
    

    但是,当我使用更“复杂”的html时,会显示消息“请检查您的电子邮件以确认您的帐户,或者”只是不显示:

    {% load static %}
    
    <!DOCTYPE html>
    <html lang="en">
      <head>
        <!-- Required meta tags -->
        <meta charset="utf-8">
        <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    
        <title>Cadastro</title>
    
        <!-- Vendor css -->
        <link href="{% static 'lib/font-awesome/css/font-awesome.css' %}" rel="stylesheet">
        <link href="{% static 'lib/Ionicons/css/ionicons.css' %}" rel="stylesheet">
    
        <!-- Slim CSS -->
        <link rel="stylesheet" href="{% static 'css/slim.css' %}">
    
      </head>
      <body>
        {% block content %}
        <form method='POST'> {% csrf_token %}
        <div class="signin-wrapper">
    
          <div class="signin-box">
            <h2 class="slim-logo"><a href="index.html">Site<span>.</span></a></h2>
            <h2 class="signin-title-primary">Bem vindo de volta!</h2>
            <h3 class="signin-title-secondary">Faça login para continuar.</h3>
    
            <div class="form-group">
              {{ form.email }}
            </div><!-- form-group -->
            <div class="form-group mg-b-50">
              {{ form.password }}
            </div><!-- form-group -->
            <button type='submit' class="btn btn-primary btn-block btn-signin">Entrar</button>
            <p class="mg-b-0"><a href="{% url "password_change" %}">Esqueci minha senha</a></p>
            <p class="mg-b-0">Não tem conta? <a href="../cadastro">Faça um cadastro</a></p>
          </div><!-- signin-box -->
    
        </div><!-- signin-wrapper -->
        </form>
    
        {% endblock %}
      </body>
    </html>
    

    我已经调试并看到消息正在正确创建,但它没有出现。 有人知道为什么吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Lemayzeur    7 年前

    所有表单验证错误都位于 form.errors 这是一本字典。
    有关更多信息,请访问 Official Django Documentation

    确保该表单。erros是 not None

    {% if form.errors %}
        {% for field, errors in form.errors.items %}
            {{ errors }}
        {% endfor %}
    {% endif %}
    

    要访问单独的字段错误,需要以下内容: form.field_name.errors

    {{ form.password }}
    {%  if form.password.arrors %}
        {{ form.password.errors }} <!-- {{ form.password.errors.as_text }} -->
    {% endif %}