django-allauth로 signup 할 때 email 필드를 표시하지 않는 방법

전제



인증 주위에 django-allauth를 사용하고 있습니다만, 가입(Signup)시에 email 입력의 input이 나오는 것을 지우고 싶다

비포 애프터



Before





After





결론



django-allauth 측에서는 그러한 설정을 할 수 없었다.
꽤 시간을 들여 그 설정을 찾았지만 Email의 필드는 지울 수 없다.
결국, django-allauth가 준비하고 있는 템플릿인 signup.html 에 Javascript를 써 그 DOM를 remove 하는 것으로 해결했다.

방법


  • templates/base.html에 자작 자바 스크립트를 작성할 수 있도록합니다.

    base.html
    <body>
        {% include 'navbar.html' %}
        <div class="container-fluid">
            {% include 'messages.html' %}
    
            {% block content %}
            {% endblock content %}
        </div>
    
        <!-- Bootstrap JS -->
        {% include 'js.html' %}
        # ↓以下の2行を追加
        {% block myJs %} 
        {% endblock myJs %}
    </body>
    

    2.templates 폴더에 django-allauth가 제공하는 템플릿을 프로젝트 폴더에 가져옵니다. account/signup.html에서 javascript 설정

    templates/account/signup.html
    {% load i18n %}
    {% load bootstrap4 %}
    
    {% block head_title %}{% trans "Signup" %}{% endblock %}
    
    {% block content %}
    <h1>{% trans "Sign Up" %}</h1>
    
    <p>{% blocktrans %}Already have an account? Then please <a href="{{ login_url }}">sign in</a>.{% endblocktrans %}</p>
    
    <form class="signup" id="signup_form" class="" method="post" action="{% url 'account_signup' %}">
      {% csrf_token %}
      {% bootstrap_form form layout='horizontal' %}
      {% if redirect_field_value %}
      <input type="hidden" name="{{ redirect_field_name }}" value="{{ redirect_field_value }}" />
      {% endif %}
      <button type="submit">{% trans "Sign Up" %} &raquo;</button>
    </form>
    
    {% endblock %}
    
    ######## この部分を追加 ############
    {% block myJs %}
    <script>
      forms = document.getElementsByClassName('form-group row')
      forms[1].remove()
    </script>
    
    {% endblock myJs %}
    ######################################
    

    이렇게 함으로써 form-group과 row 클래스가 붙은 것 중에서 email의 폼만을 제거할 수 있다.

    css에서 display: none; 하는 것보다 멋지다고 생각하는 웃음
  • 좋은 웹페이지 즐겨찾기