0

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

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

我希望一旦图像被点击以重定向到一个动态生成的关于该书的页面,该页面使用来自模型的信息来生成内容,例如书名、作者、出版年份和描述。有没有办法使用像“single_book.html”这样的html文件来做到这一点,当每本书被点击时,它会显示独特的内容?

我查找了一些 URL 模式,例如:

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

但这是否意味着必须为每本书保存每个保存的 html 文件,所以第一本书是:“single_book/book1.html”,第二本书是“single_book/book2.html”?我只想为每本书制作一个“single_book.html”的html模板文件。

如果有办法做到这一点,view.py 代码等也会是什么......?我正在运行 Django 1.6 和 Python 2.7。使用 MySQL 数据库。我暂时只是在练习使用“manage.py runserver”。

先感谢您。

4

2 回答 2

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))
于 2013-07-12T20:32:30.793 回答
1

是的,这就是应该使用模板的方式。如果您阅读有关 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,因为视图将使用 url 中的 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>
于 2013-07-12T20:34:36.613 回答