在Django视图中,如何呈现get请求

2024-06-25 22:57:36 发布

您现在位置:Python中文网/ 问答频道 /正文

在Django中,我正在编写一个处理来自页面的GET请求的视图索引.html并将请求呈现到另一个页面匹配_列表.html. 页面索引.html有多个复选框可以修改匹配时显示的数据_列表.html. 在

此时,我的代码会询问GET请求以确定每个复选框的值,然后将这些值添加到页面匹配列表中呈现的上下文中。这种方法显然是“不和谐”的,令人不满意。有人能建议我如何改进我的代码吗?在

from django.shortcuts import render

from .models import Pl1516
from .parse import parse_load


def index(request):
    if not request.GET.get('hometeam'):
        return render(request, 'main/index.html')
    else:
        hometeam_filter = request.GET.get('hometeam')
        ht_filter = request.GET.get('HT')
        htr_filter = request.GET.get('HTR')
        ftr_filter = request.GET.get('FTR')
        matches = Pl1516.objects.filter(hometeam=hometeam_filter)
        if matches.count() < 19:
            parse_load(hometeam_filter)
        context_dict = {'ht_filter': ht_filter,  'ftr_filter':     htr_filter,           'htr_filter': htr_filter,  'matches' : matches}
        return render(request, 'main/match_listings.html', context_dict)

Tags: fromimport列表getparserequesthtml页面
2条回答

也许有更好的方法可以做到这一点,但我在类似的例子中使用了字典理解法来一次性完成:

safe_get_params = { k: v for k, v in request.GET.items() if k in ['HT', 'HTR', 'FTR'] }

由于您似乎是在附加“_filter”后将键修改为更低,因此如果需要,可以按如下方式进行修改:

^{pr2}$

之后,您可以添加matches键:

context_dict['matches'] = matches

你在快乐的路上。在

因此,您有两种观点:

  1. 无更多信息index.html
  2. 主队!>;match_listings.html

这看起来像是常规的URL路由。在

urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^ht-(?P<hometeam>\w+)/$', views.MatchListView.as_view(), name='match_list'),
]

在客户端,不是附加查询字符串,而是调用另一个URL。或者,如果仍然需要支持查询字符串url:

^{pr2}$

如果parse_load真的进行分页,请考虑使用Django的内置分页(应该尽可能使用Django)。在

在一般的观点中,有很多好东西,imho,一开始可能不那么明显。比如当URL变量没有DB条目时自动返回404,分页等等

https://docs.djangoproject.com/en/1.10/topics/class-based-views/mixins/#using-singleobjectmixin-with-listview

相关问题 更多 >