当前渲染视图的Django {%url%}标记

时间:2014-08-12 21:58:00

标签: django django-templates

我正在开发一个网站,让用户可以阅读以不同方式显示的书籍。例如,我有以下网址:

  • /read_in_white/book_name/chapter_number - 显示白页
  • /read_in_pink/book_name/chapter_number - 显示粉红色页面

    我的观看功能是read_in_white(request, book_name, chapter_number)read_in_pink(request, book_name, chapter_number)

    起初我只有read_in_white,显示白页。它还在Bootstrap导航栏中有一些分页控件。这些都位于read_in_white.html模板中,其中包含用于导航不同书籍或章节的控件。例如,我在模板中有以下内容:

    <a href="{% url "app.views.read_in_white" book='Good Book' chapter=1 %}"/>

    现在我要添加read_in_pink视图和模板。 read_in_pink的导航部分与read_in_white中的导航部分几乎完全相同,但有一点不同:

    <a href="{% url "app.views.read_in_pink" book='Good Book' chapter=1"/>

    我想将所有导航移动到基本模板,但我无法弄清楚要放在(% url %}标记中的内容。如何找到当前视图的名称?我知道我可以将其添加到上下文中,或者我可以将bookchapter更改为查询参数,因此URL为/read_in_pink?book=...&chapter=...,但我希望有一些简单的事情{ {1}}。

    有吗?

1 个答案:

答案 0 :(得分:2)

不,没有,因为这会在视图和模板之间引入非常 er 耦合,这通常是一个坏主意。

但这听起来像你想要参数化颜色,不是吗? 然后,您可以将颜色传递到导航或任何您想要的位置。

def read_in_color(request, color, book, chapter):
    if color == "white":
        return render_to_response("whitetemplate")
    if color == "pink":
        return render_to_response("pinktemplate")

然后在你的模板中

{% url "app.views.read_in_color" color="pink" book="Good Book" chapter=1 %}