可用: Python 3.7 Django 2.2。用户个人资料页面,页面上有“我的帖子”、“审核帖子”、“网站上的帖子”三个按钮。每个按钮都有一个“名称”属性
任务:单击其中一个按钮时,根据按下的按钮将用户发送到带有过滤帖子的模板。
条件:无论用户按下了三个按钮中的哪一个,都需要根据按下的按钮将他发送到 filter.html 模板放置过滤数据的位置...
我不知道如何传递到按下特定按钮以获取进一步过滤数据的视图...
URLS.PY
from django.urls import path
from .views import *
urlpatterns = [
path('login/', login_view, name='login'),
path('logout/', logout_view, name='logout'),
path('filter/', objects_filter, name='objects_filter'),
path('<str:email>/', user_detail, name='user_detail'),
path('', user_list, name='user_list'),
]
意见.PY
def objects_filter(request):
template = 'objects/objects_filter.html'
if request.method == 'POST':
objects = RealObject.objects.filter(author=request.user)
if request.POST.get('get_all'):
context = {
'objects': objects
}
return render(request, template, context)
if request.POST.get('get_active_false'):
objects = objects.get(active=False)
context = {
'objects': objects
}
return render(request, template, context)
if request.POST.get('get_active_true'):
objects = objects.get(active=True)
context = {
'objects': objects
}
return render(request, template, context)
return render(request, template)
当然,我明白一切都写得歪歪扭扭的,根本就不行,所以请不要骂人,我只是在学习……
模板.HTML
{% block content %}
<h1>Добро пожаловать {{ user.first_name }}</h1>
{% csrf_token %}
<a class="btn btn-primary" type="submit" href="{% url 'objects_filter' %}" name="get_all" role="button">Все мои объекты <span class="badge badge-light">!!!</span></a>
<button class="btn btn-primary" type="submit" href="{% url 'objects_filter' %}" name="get_active_false">Мои объекты на модерации <span class="badge badge-light">!!!</span></button>
<button class="btn btn-primary" type="submit" href="{% url 'objects_filter' %}" name="get_active_true">Мои объекты на сайте <span class="badge badge-light">!!!</span></button>
<a href="{% url 'new_object' %}">Добавить объект</a>
{% endblock %}
好吧,首先,这应该向右移动 1 个选项卡
而不是最后一行,最好发出与“get_all”相同的问题
由于您使用的是 POST,因此您必须将按钮包装在表单中,或者通过 AJAX 发送带有适当参数的 POST 请求
AJAX 更好,因为当更新通过 POST 加载的页面时,会出现“再次发送请求?”窗口。
如果你不想使用 AJAX,你可以使用 GET 请求来解决这个问题,使按钮链接像
href='?get_all=1'
我还看到您正在检查过滤器
.get()
。如果 HTML 中没有指定值,例如get_all
,则 request.POST.get('get_all') 将返回 None,相当于 False(同为 0、空字符串、空数组等)。发送按钮的 HTML 代码以获得更准确的问题解决方案更新
GET 解决方案
在python中,将比较条件替换为
request.POST.get('get_active_true')
with'get_active_true' in request.GET
对于 POST
按钮元素没有 href 属性,请阅读 html 元素文档