我已经使用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())
当我登录到主页时,它是正确的,但是当我单击“我的应用”之类的其他选项卡时,尽管我仍然处于登录状态,但它会在页面上显示登录名,应该在该位置注销
答案 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)