14

SEO-friendly URL現在の URLをurls.py:

(ur'^company/news/(?P<news_title>.*)/(?P<news_id>\d+)/$','CompanyHub.views.getNews')

テンプレートで使用します:

{% for n in news %}
     <a href="{% url CompanyHub.views.getNews n.title,n.pk %}" >{{n.description}}</a>
{% endfor %}

私はそれでニュースオブジェクトに使用news_idします。この URL を変換したい:getPK

../company/news/tile of news,with comma/11

に:

../company/news/tile-of-news-with-comma/11

テンプレートで次のようなことを行うことによって:

{% for n in news %}
      <a href="{% url CompanyHub.views.getNews slugify(n.title),n.pk %}" >{{n.description}}</a>
{% endfor %}

これらの質問をチェックアウトしました: question1 question2 question3とこの記事slugify fieldですが、オンデマンドで生成したい間、データベースに保存されます。さらに、クエリを実行したいnews_id.

この質問は良いと思いますがnews_id、自分の取得に使用する方法がわかりませんnews object

4

2 に答える 2

13

これにより、必要な URL が生成されます。

{% for n in news %}
      <a href="{% url CompanyHub.views.getNews n.title|slugify n.pk %}" >{{n.description}}</a>
{% endfor %}

上記の例slugify_fieldでは、後で検索するときにデータベースに保存します。それ以外の場合、データベースには通常のタイトルがあり、検索用のコードではスラッグ化されたタイトルになります..それらを比較する簡単な方法はありません. しかし、あなたが説明した方法はより簡単です。次のようなビューが表示されます。

def news(request, slug, news_id):
    news = News.objects.filter(pk=news_id)

UPDATE : slugify で Unicode シンボルを使用するには、最初に変換が必要です。これを見てください: Django slugify を Unicode 文字列で適切に動作させるには? . Unidecodeライブラリを使用します。

次に、カスタム フィルターを追加します。

from unidecode import unidecode
from django.template.defaultfilters import slugify

def slug(value):
    return slugify(unidecode(value))

register.filter('slug', slug)

次に、テンプレートでこれを使用します:

{% load mytags %}
<a href="{% url CompanyHub.views.getNews n.title|slug n.pk %}

次に例を示します。

{{ "影師嗎 1 2 3"|slug}}

次のようにレンダリングします。

ying-shi-ma-1-2-3
于 2012-07-12T17:03:35.717 に答える
8

Have you tried n.title|slugify and see if that works for you.

ref: https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#slugify

Note: although this is possible, just make sure the 'slugified' element is never used for any part of routing... (ie, purely for display only)

于 2012-07-12T15:58:26.593 に答える