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

时间:2013-02-08 19:59:52

标签: python django url dynamic future

有人可以向我展示 {%load url from future%} namespace 概念如何运作的示例(以及一个小解释)?

我是python和django的新手,我需要学习如何不使用硬编码的网址以及如何使用其他功能,例如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')),
)

热门-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 :(得分: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.