1

私は結婚式のウェブサイトの作成者を構築しています(判断しないでください)。

ほとんどすべてのビューは、を呼び出してWedding.objects.get(id=wedding_id)から、変数の一部としてテンプレートに渡す必要があります。

これは、カスタムコンテキストプロセッサの良い使い方のようです。URLを読み取るコンテキストプロセッサを作成するための最良の方法を考え、結婚式のIDがあった場合は、テンプレートに結婚式のオブジェクトを含めます。結婚式のIDがなかった場合は、テンプレートにwedding=Noneが含まれています。

4

3 に答える 3

1

まず、各リクエストに対して明示的なクエリをコーディングするため、ほぼすべてのリクエストでこれが本当に必要であることを確認します。getクエリは、遅延とは対照的に即時ですfilter。もっと怠惰にしたい場合は、 get を小さな「get_wedding」ラッパーでラップするか、 afilterを使用してリストから取得することができます...

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}

遅延アプローチを試して、実際にオブジェクトを使用する場合にのみクエリが実行されるようにする場合は、遅延オブジェクトでラップできます。

from django.utils.functional import SimpleLazyObject
from functools import partial

def get_wedd_or_none(id_):
    try:
        return Wedding.objects.get(id=id_)
    except Wedding.DoesNotExist:
        return None

def add_wedding_context(request):
    id_ = request.GET.get('wedding_id', None)
    if id_ is not None:
        lazy = SimpleLazyObject(partial(get_wedd_or_none, id_))
        return {'wedding': lazy}
    else:
        return {'wedding': None}
于 2012-07-31T04:03:57.053 に答える
0

@Brenden なぜコンテキスト プロセッサなのですか? 使用する場合はDjango>=1.3、次のようなクラスベースのビューを使用できます

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

weddingcontext_processor よりも柔軟で好ましい方法だと思う方法で、ビューからインスタンスを渡す代わりに、もう 1 つのコンテキスト プロセッサを用意する価値はありますか?

ありがとう、

スルタン

于 2012-07-31T04:40:49.730 に答える
0
import re

def add_wedding_ring(request):
  if re.match('.*/id=.*',request.get_full_path()):
     return {'wid':Wedding.objects.get(id=wedding_id)}
  return {}
于 2012-07-31T03:47:28.757 に答える