Django-Si上下文处理器

2024-04-23 23:14:25 发布

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

我正在建立一个婚礼网站创建者(请不要评判)。在

几乎每个视图都需要调用Wedding.objects.get(id=wedding_id),然后将其作为变量的一部分传递给模板。在

这似乎是自定义上下文处理器的一个很好的用途。想知道创建一个读取URL的上下文处理器的最佳方法是什么,如果有婚礼ID,在模板中包含一个婚礼对象。如果没有婚礼ID,则在模板中婚礼=无。在


Tags: 方法视图模板idurlgetobjects网站
3条回答

首先,我要确保几乎每个请求都需要这个,因为您将在每个请求的显式查询中编写代码。get查询是即时的,而不是懒惰的filter。如果你想让它更懒,你可以把它包装在一个小的“结婚”包装里,或者使用filter从列表中抓取它。。。在

def add_wedding_context(request):
    id_ = request.GET.get('wedding_id', None)
    wedding = None
    if id_ is not None:
        try:
            wedding = Wedding.objects.get(id=id_)
        except Wedding.DoesNotExist:
            pass
    return {'wedding':wedding}

如果要尝试惰性方法,以便查询仅在实际使用对象时才运行,则可以将其包装在lazy对象中:

^{pr2}$

@Brenden为什么是上下文处理器?如果使用Django>=1.3,那么可以使用基于类的视图,比如

class ViewWedding(DetailView):
  model = Wedding
  pk_url_kwarg = 'wedding_id'
  template_name = 'you-template.html'
  context_object_name = 'wedding'

有没有必要多使用一个上下文处理器,而不是从视图中传递wedding实例,我认为它比上下文处理器更灵活、更可取?在

谢谢

苏丹

import re

def add_wedding_ring(request):
  if re.match('.*/id=.*',request.get_full_path()):
     return {'wid':Wedding.objects.get(id=wedding_id)}
  return {}

相关问题 更多 >