0

私は小さなブログアプリを書いており、そのエントリにタイトル名と ID の組み合わせでアクセスできるようにしたいと考えています。

Expression:    ^blog/([\d\w\-_]+)\-(\d+)/$
Example URL:   localhost:8000/blog/django-is-awesome-231/

最初の部分は、ブログ エントリのタイトルをすべて小文字に変換し、スペースと特殊文字を-.

エントリからそのような URL を逆にする方法を考えていました。

{% for entry in entries %}
  <li><a href="{% url 'blog.views.display', entry.title entry.id %}">{{ entry.title }}</a></li>
{% endfor %}

しかし、逆一致が見つからなかったことがわかります。

ありがとう、


私はちょうどこの方法でそれを試しました:

def get_mangled_name(self):
    """ Returns the mangled name of the entry. """
    title = self.title.lower().replace(' ', '-')
    title = ''.join(filter(lambda x: x in string.letters, title))
    if title.endswith('-'):
        title = title[:1]
    return '%s-%d' % (title, self.id)


<li><a href="{% url 'blog.views.display' entry.get_mangled_name %}">{{ entry.title }}</a></li>

しかし、それもうまくいきませんでした。

4

1 に答える 1

3

slugifyタイトルをスラッグに変換するテンプレート フィルターがあります。したがって、テンプレート コードを次のように記述できます。

{% url 'blog.views.display', entry.title|slugify entry.id %}

ただし、スラッグを扱うときはいつでも、実際にはslugモデルに値を永続的に保存するフィールドが必要です。少なくとも、César のアドバイスに従って、get_absolute_url代わりにこれを実行する必要があります。

于 2012-09-24T15:08:12.727 に答える