django - 我的 Django 中间件没有按应有的方式工作
问题描述
我如何从中间件文件reason
的模型中传递到banned.html ?UserBanning
几乎一切正常,但我似乎无法reason
从模型中获得要在模板中显示的内容,banned.html
而且我不确定方式,所以只要了解中间件,任何帮助都会令人惊叹。我应该process_request()
改用吗?
谢谢
模型.py:
from django.db import models
from django.contrib.auth.models import User
from django.conf import settings
class UserBanning(models.Model):
user = models.ForeignKey(User, verbose_name="Username", help_text="Choose Username", on_delete=models.CASCADE)
ban = models.BooleanField(default=True, verbose_name="Ban", help_text="Users Bans")
reason = models.CharField(max_length=500, blank=True)
class Meta:
verbose_name_plural = "User Banning"
ordering = ('user',)
def __str__(self):
return f"{self.user}"
中间件.py:
from .models import UserBanning
from django.shortcuts import render
class BanManagement():
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
banned = UserBanning.objects.all()
context = {
'banned': banned,
}
if(banned.filter(ban=True, user_id=request.user.id)):
return render(request, "account/banned.html", context)
else:
response = self.get_response(request)
return response
禁止.html:
{% extends "base.html" %}
{% block content %}
<p>Your account has been banned. Reason: {{ banned.reason }}</p>
{% endblock content %}
解决方案
你几乎已经完成。剩下的问题是您需要filter
在request.user.id
设置之前打开context
,以便上下文仅包含此特定用户的禁令。就像是:
banned = UserBanning.objects.filter(ban=True, user=request.user)
if banned:
context = {'banned': banned[0]}
return render(request, "account/banned.html", context)
else:
推荐阅读
- python - Python requests.get() 返回损坏的源代码而不是预期的源代码?
- google-drive-api - Google Drive sdk 标准错误代码文档
- django - Django - 使用中间用户组模型
- javascript - 注销频道监听器
- c++ - 为什么 std::is_assignable 不适用于原始类型?(确认)
- javascript - 角度路线不会更新到孩子的路径
- git - 有没有办法在 git 日志中移动提交?
- python - 在 Windows 上获取 Python3 中 .exe 文件的输出
- sharepoint - 在哪里可以找到有关 /_api/web/features/add SharePoint API 的文档?
- xml - Intellij 自定义 XML 标记格式