皆さんは、テンプレートでget_absolute_urlを使用することは非常に良い習慣であることを誰もが教えています。しかし、私の場合、それは単一のページ上のデータベースに多くの同じクエリを引き起こします。 ここに私が開発しなければならないURLの構造があります(顧客がすでにWebサイトで働いているので変更できません。私はURLを変更するとGoogleがそれを好きにしません) - mysite/category/subcategory/product_slug.html URLパターンのコードは次のとおりです。ページ(django)で毎回get_absolute_urlを呼び出さないようにするには?
from django.conf.urls import url
からです。インポートビュー
urlpatterns = [
url(r'^(?P<parent_category_slug>[\w-]+)/(?P<category_slug>[\w-]+)/(?P<slug>[\w-]+)\.html$', views.ProductDetailView.as_view(), name='product_detail'),
url(r'^(?P<parent_slug>[\w-]+)/(?P<slug>[\w-]+)$', views.ProductListView.as_view(), name='products_of_category'),
url(r'^(?P<slug>\w+)$', views.SubCategoryListView.as_view(), name='sub_category'),
url(r'^$', views.CatalogIndexListView.as_view(), name='index'),
]
そしてここではget_absolute_urlのコードは、製品のモデルである:私は個人用サイト/カテゴリ/サブカテゴリに行くとき
のでdef get_absolute_url(self):
return reverse('product_detail', kwargs={'slug':self.slug, 'parent_category_slug':self.product_category.category_parent.slug,
'category_slug':self.product_category.slug})
、私はすべての製品はサブカテゴリに属してご覧ください。これはリスト(実際にはテーブル、画像、タイトルなど)です。 すべての画像とタイトルは商品のURLでなければなりません。 は、ここではget_absolute_urlが繰り返し呼び出されるためので、結果には、私は、本当にデータベースへのクエリの多くを持って
e {% for product in products %}
<tr>
<td class="product_name_list">
<a href="{{ product.get_absolute_url }}">{{ product.product_name }}</a>
</td>
<td class="product_article_list">{{ product.product_article }}</td>
{% if product.product_main_image %}
<td class="product_image_list"><a href="{{ product.get_absolute_url }}" ><img src='{{ product.product_main_image.url}}' alt=""></a></td>
{% else %}
<td class="product_image_list"><a href="{{ product.get_absolute_url }}" ><img src='{% static "images/empty.gif" %}' alt=""></a></td>
{% endif %}
<td class="product_request_list"><a href="#">Запросить</a></td>
</tr>
{% endfor %}
テンプレート
内のコードの一部です。これを避けてください。私はデフォルトのマネージャクラスを 'get_related()'に設定しようとしましたが、すべてのインスタンスがget_absolute_urlメソッドを何度も何度も呼び出すため、愚かではありませんでした。
ありがとうございます!お電話の際は、そのよう
おかげさまで、ありがとうございます。今日は試してみます –
答えに「+」を追加できません。あなたの答えは本当に必要なものではありませんでしたが、依然として非常に役に立ちました。 私の意見では、{%url%}を使用し、クエリセットで 'select_related'、 'prefetch_related'を使用する必要がありました。 –
urlタグの使用は 'get_absolute_url'と同じです。実際には、モデルオブジェクトのDRYリンク生成のために 'url'タグに' get_absolute_url'を使うことがよくあります。 – v1k45