Django网页在应该注销时显示登录名

时间:2018-07-30 09:36:42

标签: html django

我已经使用Django 1.11.14,python 2.7和win 7建立了一个网站,可以让注册用户登录。 但是,当我登录时,某些页面应该再次显示登录链接,而应该是注销链接。

主页

<!DOCTYPE html>
<html lang="en">
<head>
  
  {% block title %}<title>xxxxx</title>{% endblock %}
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  
  <!-- Add additional CSS in static file -->
  {% load static %}
  <link rel="stylesheet" href="{% static 'css/styles.css' %}">
</head>
<body>

<div class="container-fluid">

<div class="row">
  <div class="col-sm-2">
  {% block sidebar %}
  <ul class="sidebar-nav">
      <br>
    <li><a href="{% url 'index' %}"><mark>Home</mark></a></li>
      <br>
    <li><a href="{% url 'FWs' %}"><mark>FW request</mark></a></li>
      <br>

  </ul>
 
  <ul class="sidebar-nav">
   {% if user.is_authenticated %}
     <li>User: {{ user.get_username }}</li>
     <li><a href="{% url 'my-applied' %}"><mark>My applied</mark></a></li>
      <br>
     <li><a href="{% url 'logout'%}?next={{request.path}}"><mark>Logout</mark></a></li>
   {% else %}
     <li><a href="{% url 'login'%}?next={{request.path}}"><mark>Login</mark></a></li>
   {% endif %} 
  </ul>
  
   {% if user.is_staff %}
   <hr />
   <ul class="sidebar-nav">
   <li>Staff</li>
   {% if perms.catalog.can_mark_returned %}
   <li><a href="{% url 'all-applied' %}"><mark>All applied</mark></a></li>
   {% endif %}
   </ul>
    {% endif %}
 
{% endblock %}
  </div>
  <div class="col-sm-10 ">
  {% block content %}{% endblock %}
  
  {% block pagination %}
    {% if is_paginated %}
        <div class="pagination">
            <span class="page-links">
                {% if page_obj.has_previous %}
                    <a href="{{ request.path }}?page={{ page_obj.previous_page_number }}">previous</a>
                {% endif %}
                <span class="page-current">
                    Page {{ page_obj.number }} of {{ page_obj.paginator.num_pages }}.
                </span>
                {% if page_obj.has_next %}
                    <a href="{{ request.path }}?page={{ page_obj.next_page_number }}">next</a>
                {% endif %}
            </span>
        </div>
    {% endif %}
  {% endblock %} 
  
  
  </div>
</div>

</div>
</body>
</html>

FW_request

{% extends "base_generic.html" %}

{% block content %}
    <p style = "color:#FF0000";> XXx</p>


    {% if FW_list %}
    <ul>
      {% for FWinst in FW_list %}
        {% if FWinst.is_approved %}
        <p style = "color:#008000";>xxxx</p>
        <p></p>
        <br>
        {% endif %}
      {% endfor %}
    </ul>

    {% else %}
      <p>Nothing.</p>
    {% endif %}       
{% endblock %}

view.py

class LoanedFWsByUserListView(LoginRequiredMixin,generic.ListView, FormView):


model = XX
paginate_by = 10
template_name = 'FW_request.html'
def get(self, request):
    form = xx[![enter image description here][1]][1]Form()
    FW_list = FW.objects.all().order_by('approve_time').reverse()        
    return render_to_response(self.template_name, locals())

当我登录到主页时,它是正确的,但是当我单击“我的应用”之类的其他选项卡时,尽管我仍然处于登录状态,但它会在页面上显示登录名,应该在该位置注销

2 个答案:

答案 0 :(得分:1)

您应该使用render函数而不是public class ConfigureMvcOptions : IConfigureOptions<MvcOptions> { private readonly IUserRepository userRepository; public ConfigureMvcOptions(IUserRepository userRepository) { this.userRepository = userRepository; } public void Configure(MvcOptions options) { var policy = new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .Build(); options.Filters.Add(new RolesAuthorizationFilter(userRepository)); } } 。该请求可以在模板中使用。

render_to_response

答案 1 :(得分:0)

您错过了在此处使用基于类的视图的意义。如果有的话,应该很少定义get(或post)。在这种情况下,您只应定义get_context_data来添加FW_list,并让视图处理创建表单和呈现模板的过程。

def get_context_data(self, **kwargs):
    kwargs['FW_list'] = FW.objects.all().order_by('approve_time').reverse()        
    return super().get_context_data(**kwargs)