21

DjangoFlatpagesテンプレートの逆URLを取得するにはどうすればよいですか?

4

10 に答える 10

25

私は次の解決策を好みます(Django> = 1.0が必要です)。

settings.py

INSTALLED_APPS+= ('django.contrib.flatpages',)

urls.py

urlpatterns+= patterns('django.contrib.flatpages.views',
    url(r'^about-us/$', 'flatpage', {'url': '/about-us/'}, name='about'),
    url(r'^license/$', 'flatpage', {'url': '/license/'}, name='license'),
)

テンプレートで

[...]
<a href="{% url about %}"><span>{% trans "About us" %}</span></a>
<a href="{% url license %}"><span>{% trans "Licensing" %}</span></a>
[...]

またはあなたのコードで

from django.core.urlresolvers import reverse
[...]
reverse('license')
[...]

そうすれば、使用する必要がなくなりdjango.contrib.flatpages.middleware.FlatpageFallbackMiddleware、他のソリューションのように多くのコードを記述しなくても、通常どおり逆に機能します。

乾杯。

于 2010-01-11T21:07:46.493 に答える
24

ルートurlconfにフラットページを含めます。

from django.conf.urls.defaults import *

urlpatterns = patterns('',
    ('^pages/', include('django.contrib.flatpages.urls')),
)

次に、あなたの見解では、次のようにリバースを呼び出すことができます。

from django.core.urlresolvers import reverse

reverse('django.contrib.flatpages.views.flatpage', kwargs={'url': '/about-us/'})
# Gives: /pages/about-us/

テンプレートでは、{%url%}タグ(内部でreverseを呼び出します)を使用します。

<a href='{% url django.contrib.flatpages.views.flatpage url="/about-us/" %}'>About Us</a>
于 2009-07-22T11:43:51.053 に答える
2

私の意見では、言及された解決策はどれもDRYの原則に十分に準拠していなかったので、私はこれを実行しました。

# core/templatetags/hacks.py

from django import template

register = template.Library()

@register.simple_tag
def flaturl(title):
    """
        Returns the url for a flatpage based on the title.
        NOTE: Obviously the title must be unique.
    """

    from django.contrib.flatpages.models import FlatPage

    try:
        page = FlatPage.objects.get(title=title)
    except:
        return ""

    return page.url

次に、リンクを作成する必要のあるテンプレートで、次のようにしました。

{% load hacks %}
...
<a href="{% flaturl 'My Page Title' %}">Page Title</a>

パフォーマンスを維持するためにそこにキャッシュを追加するかもしれませんが、これは私にとってはうまくいきます。

于 2011-06-03T12:50:01.667 に答える
2

フラットページを指すようにベースURLconfを記述します。それがページの下にあると仮定します:

urlpatterns = patterns('',
...
    url(r'^pages/', include('project.pages.urls')),
...
)

次に、通常どおりフラットページを記述します。

urlpatterns = patterns('django.views.generic.simple',
    url(regex=r'^resume/$',     view='direct_to_template', kwargs={'template': 'resume.html'}, name='resume'),
    url(regex=r'^about/$',      view='direct_to_template', kwargs={'template': 'about.html'},  name='about'),
    url(regex=r'^books/$',      view='direct_to_template', kwargs={'template': 'library.html'},name='books'),
)

次に、テンプレートは通常の方法でそれらを参照します。

<div id="pages">
...
    <div class="pagelinks">
        <a href="{% url about %}">ABOUT</a>
    </div>
</div>
于 2009-07-18T02:24:20.490 に答える
2

Flatpagesの利点は、ビュースタブやURL設定を作成する必要がないことだと思いましたか?それ以外の場合は少し無意味です...ビューとURLを作成している場合は、代わりにフラットページのコンテンツをテンプレートhtmlとして保存することもできます。

代わりにこれを試してください: https ://github.com/0sn/nameremoved/wiki/flatpages

于 2009-11-22T14:30:06.807 に答える
2

使用するためにurlconfを作成する必要がある場合、DjangoFlatpagesを使用しても意味がないというAnentropicに同意します。直接などの一般的なビューを使用する方がはるかに簡単です。TemplateView

from django.conf.urls import patterns, url
from django.views.generic import TemplateView

urlpatterns = patterns('',
    url(r'^about/$', TemplateView.as_view(template_name="about.html"), name="about"),
)

FlatpagesはFlatpageFallbackMiddleware、404エラーをキャッチし、データベース内の要求されたURLのコンテンツを検索しようとするを利用します。主な利点は、テンプレート内の何かを変更する必要があるたびにテンプレートに直接触れる必要がないことです。欠点は、データベースを使用する必要があることです:)

それでもFlatpagesアプリを使用する場合は、get_flatpagesテンプレートタグを使用することをお勧めします。

{% load flatpages %}
<ul>
    {% for page in get_flatpages %}
        <li><a href="{{ page.url }}">{{ page.title }}</a></li>
    {% endfor %}
</ul>

個人的には、ウェブサイトのメインメニュー以外のフラットページを参照することはめったにありません。これは、経由で含まれ{% include 'includes/nav.html' %}、次のようになります。

<ul>
    <li><a href="/about/">About</a></li>
    <li><a href="/credits/">Credits</a></li>
    ...
</ul>

DRYKISSなどに違反しているとは感じません:)

于 2011-12-19T16:39:17.303 に答える
1

フラットページを作成するときは、モデルの一部として保存されるURLを指定する必要があります。したがって、任意のフラットページオブジェクトからURLを取得できます。テンプレートの場合:

{{ flatpage.url }}

フラットページのURLを再マッピングしurls.pyてから、逆の種類を使用する必要があると、フラットページアプリの目的が損なわれます。

于 2010-05-24T20:34:55.827 に答える
1

あなたはURLconfを再宣言する必要があり'django.contrib.flatpages.urls'、ドキュメントが私たちに使用を勧めているという公式に頼ることはできません。

これはもっと難しいことではありません、ただあなたに含めてくださいurls.py

from django.conf.urls import patterns, url

urlpatterns += patterns('',
    ...
    url(r'^pages(?P<url>.*)$', 'django.contrib.flatpages.views.flatpage', name='flatpage'),
    ...
)

そして今、あなたはあなたの通常の逆URLテンプレートタグを使うことができます

<a href='{% url 'flatpage' url="/about-us/" %}'>About Us</a>

または、すべてのフラットページのリストを表示します

<ul>
    {% get_flatpages as flatpages %}
    {% for page in flatpages %}
        <li><a href="{% url 'flatpage' url=page.url %}">{{ page.title }}</a></li>
    {% endfor %}
</ul>
于 2013-09-28T18:40:08.973 に答える
1

適切なDjango>=1.10:

urls.py

urlpatterns += [
    url(r'^(?P<url>.*/)$', flatpage, name='flatpage'),
]

テンプレート内の簡単なルックアップ:

{% url "flatpage" url="SOME_URL" %}

ここで、SOME_URLはflatpage.urlフィールドからの値です

于 2017-04-21T09:08:13.530 に答える
0

フラットページに関するこのdjangoドキュメントによると

あなたは簡単に行うことができます

{% load flatpages %}
{% get_flatpages as flatpages %}
<ul>
    {% for page in flatpages %}
        <li><a href="{{ page.url }}">{{ page.title }}</a></li>
    {% endfor %}
</ul>

テンプレート内。

于 2016-05-20T08:18:46.803 に答える