将models.py的数据导入模板中

时间:2014-07-26 05:38:55

标签: python django

我是一个不成熟的django开发者。我有一个名为“Post”和“Catagory”的两个类的模型。我想在我的模板中阅读分类项目。如何在模板中导入我的类别并在我的页面中显示它的数据?

models.py

from django.db import models
from taggit.managers import TaggableManager

class Category(models.Model):
    title = models.CharField(max_length=40)
    def __unicode__(self):
        return self.title

class Post (models.Model):
    title = models.CharField(max_length=150)
    body = models.TextField()
    date = models.DateTimeField()
    tags = TaggableManager ()
    cats = models.ManyToManyField(Category)
    def __unicode__ (self):
        return self.title

谢谢。

2 个答案:

答案 0 :(得分:0)

它就像获取类别值并分配到设置中并传入视图html将起作用

def viewfuncion(request):

    template_vars = {}
    settings = Category.objects.get(pk=1)
    template_vars['title_show'] = settings.title
    t = loader.get_template('view.html')
    c = Context(template_vars)

    return HttpResponse(t.render(c), content_type = "application/xhtml")

因此,在您的HTML {title_show}中将打印内容

答案 1 :(得分:0)

如果您使用的是基于类的视图,并希望列出您可以执行的所有类别:

# urls.py
url(regex=r'^category/$',
    view=CategoriesListView.as_view(),
    name='category_list_all'),

# views.py
class CategoriesListView(ListView):
    model = Category

# category_list.html
<h2>Category list</h2>

<ul>
  {% for cat in category_list %}
  <li>
      {{ cat.category }}
  </li>
  {% endfor %}
</ul>

您可以将html文件放在<project_route>/<app_name>/templates/<app_name>/<project_route>/templates/<app_name>/

如果你有一个现有的基于功能的视图使用Post模型,那么你可以这样做:

# views.py
...
post = get_object_or_404(Post, pk=pass_in_pk)
return render(request, 'post.html', {'post': post})

# post.html
<h2>Category list</h2>

<ul>
  {% for category in post.cats %}
  <li>{{ category.title }}</li>
  {% endfor %}
</ul>                

如果您使用DetailView基于Post模型的基于类的视图,那么您也可以使用上面的html,只需将它放在post_detail.html的相应文件夹中。