2024-04-23 23:14:25 发布
网友
我正在建立一个婚礼网站创建者(请不要评判)。在
几乎每个视图都需要调用Wedding.objects.get(id=wedding_id),然后将其作为变量的一部分传递给模板。在
Wedding.objects.get(id=wedding_id)
这似乎是自定义上下文处理器的一个很好的用途。想知道创建一个读取URL的上下文处理器的最佳方法是什么,如果有婚礼ID,在模板中包含一个婚礼对象。如果没有婚礼ID,则在模板中婚礼=无。在
首先,我要确保几乎每个请求都需要这个,因为您将在每个请求的显式查询中编写代码。get查询是即时的,而不是懒惰的filter。如果你想让它更懒,你可以把它包装在一个小的“结婚”包装里,或者使用filter从列表中抓取它。。。在
get
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对象中:
@Brenden为什么是上下文处理器?如果使用Django>=1.3,那么可以使用基于类的视图,比如
Django>=1.3
class ViewWedding(DetailView): model = Wedding pk_url_kwarg = 'wedding_id' template_name = 'you-template.html' context_object_name = 'wedding'
有没有必要多使用一个上下文处理器,而不是从视图中传递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 {}
首先,我要确保几乎每个请求都需要这个,因为您将在每个请求的显式查询中编写代码。
get
查询是即时的,而不是懒惰的filter
。如果你想让它更懒,你可以把它包装在一个小的“结婚”包装里,或者使用filter
从列表中抓取它。。。在如果要尝试惰性方法,以便查询仅在实际使用对象时才运行,则可以将其包装在lazy对象中:
^{pr2}$@Brenden为什么是上下文处理器?如果使用
Django>=1.3
,那么可以使用基于类的视图,比如有没有必要多使用一个上下文处理器,而不是从视图中传递
wedding
实例,我认为它比上下文处理器更灵活、更可取?在谢谢
苏丹
相关问题 更多 >
编程相关推荐