【问题标题】:tweaking django rest framework template调整 django rest 框架模板
【发布时间】:2015-01-13 18:30:26
【问题描述】:

我正在尝试调整这里代码的登录功能 -

{% block userlinks %}
    {% if user.is_authenticated %}
        {% optional_logout request user %}
    {% else %}
        {% optional_login request %}
    {% endif %}
{% endblock %}

我想让它在登录时在“注销”之前也显示一个值作为“仪表板”,并让该引用另一个在 django 中表示的 URL。

所以它在下拉列表中看起来像这样 -

USER -
    - dashboard
    - logout

我认为这是在代码中添加一行这样的问题 -

{% block userlinks %}
    {% if user.is_authenticated %}
        <a href="#dashboard">Dashboard</a>
        {% optional_logout request user %}
    {% else %}
        {% optional_login request %}
    {% endif %}
{% endblock %}

这最终会在导航栏中创建一个单独的值,但这是我不想要的。如何内联?

【问题讨论】:

    标签: javascript django html django-rest-framework


    【解决方案1】:

    以下是适合您的代码:

    {% block userlinks %}
        {% if user.is_authenticated %}
            <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                    {{ user }}
                    <b class="caret"></b>
                </a>
                <ul class="dropdown-menu">
                    <li><a href="#dashboard">Dashboard</a></li>
                    <li>{% optional_logout request %}</li>
                </ul>
            </li>
        {% else %}
            <li>{% optional_login request %}</li>
        {% endif %}
    {% endblock %}
    

    请给我反馈。

    编辑:

    链接应该在列表项中。我添加了&lt;li&gt; 标签。

    【讨论】:

    • 你把我引向了正确的方向。我必须做一些逆向工程才能得到它,并且必须使用 rest_framework 模板标签中的代码制作一个自定义模板标签。
    【解决方案2】:

    /myapp/templatetags/internal_extras.py

    from __future__ import unicode_literals, absolute_import
    from django import template
    from django.core.urlresolvers import reverse, NoReverseMatch
    from django.http import QueryDict
    from django.utils import six
    from django.utils.encoding import iri_to_uri
    from django.utils.html import escape
    from django.utils.safestring import SafeData, mark_safe
    from django.utils.html import smart_urlquote
    from rest_framework.compat import urlparse, force_text
    import re
    
    register = template.Library()
    
    @register.simple_tag
    def my_logout(request, user):
        """
        Include a logout snippet if REST framework's logout view is in the URLconf.
        """
        try:
            logout_url = reverse('rest_framework:logout')
        except NoReverseMatch:
            return '<li class="navbar-text">{user}</li>'.format(user=user)
    
        snippet = """<li class="dropdown">
            <a href="#" class="dropdown-toggle" data-toggle="dropdown">
                {user}
                <b class="caret"></b>
            </a>
            <ul class="dropdown-menu">
                <li><a href='/dashboard'>Dashboard</a></li>
                <li><a href='{href}?next={next}'>Log out</a></li>
            </ul>
        </li>"""
    
        return snippet.format(user=user, href=logout_url, next=escape(request.path))
    

    然后在我的 HTML 中,我有以下内容 -

    {% load internal_extras %}
    
    {% if user.is_authenticated %}
        {% my_logout request user %}
    {% else %}
        {% optional_login request %}
    

    做到了。

    【讨论】:

      猜你喜欢
      • 2020-10-29
      • 2014-08-24
      • 1970-01-01
      • 2017-03-27
      • 2018-12-10
      • 2019-09-13
      • 2016-08-10
      • 2018-10-28
      • 1970-01-01
      相关资源
      最近更新 更多