Django模板可以在相同的“Template.html”名称下拥有动态模型内容吗?

时间:2013-07-12 20:25:28

标签: django python-2.7 django-templates django-views

我有一个主页,其中包含图书的图像,这些图书是生成它们的模板{%for%}语句中的href链接。它大致如下:

{% for book in books %}
<a href="/single_book/">
  <img src="{{book.image}}">
</a>

我希望一旦图像被点击以重定向到动态生成的页面,该页面使用来自模型的信息来生成内容,例如书名,作者,发布年份和描述。有没有办法使用像“single_book.html”这样的html文件来执行此操作,并且在单击每本书时它会显示唯一的内容?

我查找了一些网址格式,例如:

url(r'^single_book/(\w+)/$', single_book),

但这是否意味着必须为每本书保存每个保存的html文件,因此第一本书是:“single_book / book1.html”,第二本书是“single_book / book2.html”?我想只有一个单独的html模板文件“single_book.html”为每本书做。

如果有办法做到这一点,那么view.py代码等等......?我正在运行Django 1.6和Python 2.7。使用MySQL DB。我刚刚练习使用“manage.py runserver”。

提前谢谢。

2 个答案:

答案 0 :(得分:1)

您只需要为特定图书的详细信息创建单个html文件:

book_detail.html

{{book.title}}
{{book.author}}
{{book.description}}

您只需将书籍实例传递给用户请求的模板book_detail.html

网址:

url(r'^single_book/(\d+)/$', single_book),

观点:

def single_book(request, pk):
    book = Book.objects.get(pk=pk)
    ctx = {'book': book}
    return render_to_response('book_detail.html', RequestContext(request, ctx))

答案 1 :(得分:1)

是的,这就是模板的使用方式。如果您阅读this link关于Django的基于类的视图(特别是DetailView),您可以大致了解您应该做什么:

# views.py, using the generic CBV DetailView
class SingleBookView(DetailView):
    object = Book

singlebook = SingleBookView.as_view()

# url.py change slightly so you can use named urls in templates
url(r'^single_book/(?P<pk>\w+)/$', singlebook, name='singlebook')

然后每本书的模板可以是相同的single_book.html,因为视图会使用您网址中的pk参数自动检测到该书对象

<p>{{ object.title }}</p>

另外,您现在可以使用命名网址:

{% for book in books %}
    {# see how your original loop changes with named urls #}
    <a href="{% url singlebook book.pk %}">
        <img src="{{book.image}}">
    </a>