{% load url from future %} 和命名空间在Django中如何工作?

0 投票
1 回答
501 浏览
提问于 2025-04-17 15:17

有没有人能给我举个例子(再加点简单的解释),说明一下{% load url from future %}namespace这两个概念是怎么工作的?

我刚学python和django,想知道怎么避免写死链接(硬编码的url),还想学学怎么用其他函数,比如reverse()。

这是我想做的一个例子:

urls.py

urlpatterns = patterns('',
    """
      This one is what i did first but works with hardcoded url inside 
      top-navigator.html:
      url(r'^books/$', 'books.views.book_index'),

      The next one is what i'm trying to do:
      (but of course is not correct)
    """
    url(r'^books/$', include('books.views.book_index', namespace='books')),
)

top-navigator.html

当我尝试运行服务器时,出现了这个错误:

捕获到ImportError:没有名为book_index的模块

{% load url from future %}

<div class="navbar-inner">
<ul class="nav">
    <li class="active"><a href="/">Home</a></li>
    <li><a href="{% url 'books:book_index' %}">Books</a></li>
    <li><a href="/authors">Authors</a></li>
    <li><a href="/publishers">Publishers</a></li>
    <li><a href="/contact">Contact</a></li>
</ul>
</div>

我该怎么做才能让所有链接都能类似这样工作呢?

提前谢谢你们。

1 个回答

0

要使用命名空间和 include 语句,你 必须 导入另一个包含 patterns 的 urls.py 文件。

你不能像这里那样直接 include 一个视图。

把你的代码改成:

{% url 'book_index' %}"

url(r'^books/$', 'books.views.book_index', name='books'))

或者为了说明命名空间的用法:

more_patterns = patterns('',
    url(r'^$', 'book.views.book_index', name='book_index')),
)

urlpatterns = patterns('',
    url(r'^books/', include(more_patterns, namespace='books')),
                            #^^^^^^^ note you would normally use a string that points
                            #        to a python file containing urls.
)

{% url 'books:book_index' %} will now resolve.

撰写回答