-1

model.pyで次のget_absolute_urlを定義しています。

class Product(models.Model):

  def get_absolute_url(self):
      return "/products/category/type/%d%s%d" % (self.owner.id,
      self.owner, self.id)  

urls.pyで次のurlconfを定義しています。

url(r'^products/category/type/(\w+)(\w+)(\w+)/$', 'detail'),

views.py内の「detail」メソッドで、get_absolute_urlを使用してProductオブジェクトのインスタンスを参照するにはどうすればよいですか?

私はこれが初めてです。助けてくれてありがとう!

4

1 に答える 1

1

あなたが実際にやりたいことは、単にdetailビュー内の関連するオブジェクトを取得することだと思います。

しかし、最初に警告の言葉:あなたのURLは非常に奇妙であり、あなたが期待する結果をあなたに与えません。所有者ID、所有者、およびIDの値の間には分割がないため、正規表現は常に最後の2つまでのすべての文字を所有者IDとして割り当て、それぞれ1つを所有者とIDに割り当てます。たとえば、URLがである場合、これは常にとして解析されるため、products/category/type/1daniel34/解析されるのではなく。キャプチャする各要素の間にスラッシュを入れ、数字を照合する代わりに使用し、名前付きグループを使用する必要があります。('1', 'daniel', '34')('1daniel', '3', '4')\d\w

^products/category/type/(?P<owner_id>\d+)/(?P<owner>\w+)/(?P<id>\d+)/$

(また、urlconfから文字列全体を再現するのではなくpermalinkデコレータを使用して絶対URLを生成することを検討する必要があります。)

ここで、視点は、URLconfからキャプチャされた値が渡されるということです。したがって、絶対URLへの参照は混乱を招きます。get_absolute_urlによって生成される値を気にする必要はありません。ビューに渡された値を使用してデータベースにクエリを実行するだけです。この場合、ビューは次のようになります。

def detail(owner_id, owner, id):
    product = Product.objects.get(id=id, owner_id=owner_id)
    ...etc...

owner所有者IDでオブジェクトを識別するのに十分である可能性が高いため、への参照を省略していることに注意してください。実際、ID自体は一意であり、所有者はまったく必要ないため、ID自体で十分だと思いますが、それはあなた次第です。

于 2012-07-28T21:34:37.593 に答える