我怎么能得到的反url Django简单页面模板

有帮助吗?

解决方案

在根的URLconf

包含的flatpages:

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%}标签(它调用反向内部):

<a href='{% url django.contrib.flatpages.views.flatpage url="/about-us/" %}'>About Us</a>

其他提示

我更喜欢以下溶液(需要的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和反向这样照常工作,没有写了这么多的代码中的其他解决方案。

干杯。

写您的基本URL CONF以指向您的flatpages。假设它是下的网页:

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

然后编写的flatpages为正常:

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>

当您创建的任何简单页面,你需要指定其保存为模型的一部分的URL。因此,你可以从任何简单页面对象中的URL。在模板:

{{ flatpage.url }}

重新映射在urls.py简单页面的URL,然后不必使用逆向排序的击败的flatpages应用的目的。

足够提到的解决方案中没有跟随在我看来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>

我可以在里面添加一些缓存来保持较高的性能,但是这对我的作品。

您需要重新声明网址的conf并不能依靠官方'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'),
    ...
)

现在你可以用你平常的反向链接的模板标签

<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>

适当的Django> = 1.10:

urls.py

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

在模板中查找容易:

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

其中SOME_URL是值弗罗姆flatpage.url字段

根据这个 django文件简单页面

你可以简单地做

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

在你的模板。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top