2017-04-04 70 views
1

我是Django的初学者。将多个对象传递给具有渲染的模板

我有以下型号项目:

我的文章型号:

class Post(models.Model): 
    title = models.CharField(max_length=200) 
    slug = models.SlugField(max_length=160) 
    content = models.TextField() 
    image = models.ImageField(upload_to=upload_location) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    categorie = models.CharField(max_length=200) 
    categorie = models.ForeignKey('categorie.Categorie') 
    publier = models.BooleanField() 

我的投资组合大类车型这与我的文章型号链接:

class Categorieport(models.Model): 
    title = models.CharField(max_length=200) 
    article = models.OneToOneField('posts.Post')  

最后,我所有的照片组合模型:

class Portfolio(models.Model): 
    title = models.CharField(max_length=200) 
    image = models.ImageField(upload_to=upload_location) 
    timestamp = models.DateTimeField(auto_now=False, auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True, auto_now_add=False) 
    categorieportfolio = models.ForeignKey('Categorieport') 

在一个视图和一个模板中,我想要显示与文章相关的文章和投资组合信息。

我写了下面的观点:

def portfolio(request, article=None): 
    portfolio = get_object_or_404(Categorieport, article=article) 
    image_portfolio = portfolio.portfolio_set.all() 
    return render(request, 'portfolio1.html', {'portfolio': portfolio, 'image_portfolio': image_portfolio}) 

而下面的模板:

<div class="titre-display"> 
    <h2>{{ portfolio.article.timestamp|date:"d E Y" }}/{{ portfolio.article.categorie}} </h2> 
    <h1>{{ portfolio.article.title}}</h1> 
</div> 

<div class="content-display"> 
    <div class="content-display-main"> 
     <div class="content-display-main-portfolio"> 
      <div class="image-portfolio"> 
       <a class="example-image-link" href="{{ image_portfolio.image.url }}" data-lightbox="example-set" data-title="{{image_portfolio.title}}"> 
       </a> 

我可以从我的文章访问信息,但我无法从我的投资组合获取信息。我尝试了它的外壳,它的工作原理。我无法弄清楚为什么它在我的视图和模板中不起作用。

你有什么想法吗?

预先感谢您

Singertwist

+0

请妥善格式化你的代码。阅读不好。另外,一般查看基于类的视图,特别是'get_context_data'方法。 – creimers

回答

0

你image_portfolio是一个QuerySet,这手段是某种形式的名单,你必须使用一个循环访问项目,他们访问属性:

<div class="content-display"> 
    <div class="content-display-main"> 
     <div class="content-display-main-portfolio"> 
      <div class="image-portfolio"> 
      {% for item_img in image_portfolio %}  
       <a class="example-image-link" href="{{ item_img.image.url }}" data-lightbox="example-set" data-title="{{item_img.title}}"></a> 
      {% endfor %} 
0

试试这个:

# views.py 

def portfolio(request, article=None): 
    # first get the Post instance with slug = article (I'm assuming article passed as url argument, is a slug) 
    post = get_object_or_404(Post, slug=article) 

    # get the Categoriepost object based on a specifi article 
    categorie_port = get_object_or_404(Categorieport, article=post) 

    # image_portfolio is a QuerySet (that is a list of Portfolio objects) 
    image_portfolio = categorie_port.portfolio_set.all() 

    return render(request, 'portfolio1.html', {'portfolio': categorie_port, 'image_portfolio': image_portfolio}) 

留下你的HTML原样。

0

嗨谢谢大家的回答。

所以,我用一个for循环来解决我之前提到的情况。

下面,我的代码:

<div class="titre-display"> 
     <h2>{{ portfolio.article.timestamp|date:"d E Y" }}/{{ portfolio.article.categorie}} </h2> 
     <h1>{{ portfolio.article.title}}</h1> 
    </div> 

    <div class="content-display"> 

     <div class="content-display-main"> 

     <div class="content-display-main-portfolio"> 


       {% for photo in image_portfolio %} 

       <div class="image-portfolio"> 

       <a class="example-image-link" href="{{ photo.image.url }}" data-lightbox="example-set" data-title="{{photo.title}}"> 

      {% thumbnail photo.image "300x300" crop="center" as im %} 
       <img class="example-image" src="{{ im.url }}" alt=""/> 
      {% endthumbnail %}  

       </a> 
       <p>{{photo.title}}</p> 
       </div> 

      {% empty %} 

       <p>Aucun portfolio.</p> 

      {% endfor %}   

     </div>    

     </div> 

而我的观点:

def portfolio(request, slug=None, article=None): 
slug = get_object_or_404(Post, slug=slug) 
portfolio = get_object_or_404(Categorieport, article=article) 
image_portfolio = portfolio.portfolio_set.all() 
return render(request, 'portfolio.html', {'portfolio': portfolio, 'image_portfolio': image_portfolio}) 

您的帮助再次感谢

Singertwist

相关问题