2016-12-09 13 views
1

當我使用模板變量替換項目模型中的字段時,如{{ project.title }}{{ project.featured_image }}。它像一個魅力。我可以在一個模型上使用{{variables}},但不能使用另一個模型?

但是,如果我嘗試在MapData模型{{ mapdata.location }}的相同HTML模板中做類似的事情,它不會取代任何值,它只是空白。

這是爲什麼?我一直在閱讀模型並在Django Docs中查詢部分。它是否需要其他技術,因爲它是ForeignKey?很顯然,我在這裏錯過了一些基本的東西,但我無法找到它自己的東西。

有人可以向我解釋如何「訪問」該MapData模型嗎?我已經通過管理員在這個models.py的每個字段中添加了一些正確的數據。

>>> from projects.models import * 
>>> MapData.objects.all() 
<QuerySet [<MapData: MapData object>, <MapData: MapData object>]> 

>>> from projects.models import * 
>>> Project.objects.all() 
<QuerySet [<Project: Some title 1>, <Project: Some title 2>]> 

哪裏型號:

from django.db import models 


class Project(models.Model): 
    title = models.CharField(max_length=200) 
    text = models.TextField() 
    date = models.DateField() 
    featured_image = models.ImageField(
     upload_to='projects/featured', default=False) 

    def __str__(self): 
     return self.title 


class ProjectImage(models.Model): 
    project = models.ForeignKey(Project, related_name='images') 
    image = models.ImageField(upload_to='projects') 


class MapData(models.Model): 
    project = models.ForeignKey(Project) 
    longitude = models.DecimalField(
     max_digits=10, decimal_places=8, default=False) 
    latitude = models.DecimalField(
     max_digits=10, decimal_places=8, default=False) 
    location = models.CharField(max_length=200, blank=True) 

下面是測試HTML模板,project_detail.html

<!DOCTYPE html> 
<html> 
    <head> 
    <meta charset="utf-8"> 
    <title>Project {{ project.title }}</title> 
    </head> 
    <body> 
    <div class="project_featured"> 
     <img src="{{ MEDIA_URL }}/media/{{ project.featured_image }}" alt="{{ project.title }}" /> 
    </div> 
    <div class="project_content"> 
     <h4>{{ project.title }}</h4> 
     <p>{{ project.text|linebreaks }}</p> 
     <h5>{{ project.get_typology_display }}</h5> 
     <h5>Location: {{ mapdata.location }}</h5> 
    </div> 
    </body> 
</html> 

回答

1

我相信你正在試圖獲得地圖數據特定項目,所以你需要遵循關係

{% for map_data in project.mapdata_set.all %} 
{{ map_data.location }} 
{% endfor %} 

{{ }}變量標記引用當前上下文中的變量,其中mapdata不是。就其本身而言,你會期望它涉及哪些數據?通過在與項目相關的所有地圖數據上提供循環,您將map_data(迭代對象)添加到當前示波器上下文中。

+0

感謝,它工作。那麼這可能是我感到困惑。由於我在project_detail.html中,而不是project_list.html,我認爲這足夠上下文了。因此不需要循環。 – itchangry

+0

@itchangry - 這一切都歸結爲項目和map_data之間的關係。你需要以某種方式告訴它你正在尋找什麼map_data。我想通過它的聲音想象你正在使用一個'DetailView'並且'context_object_name'被定義爲'project',這就是將'project'添加到上下文數據以及爲什麼允許你使用該變量 – Sayse

+1

你是現貨!我需要閱讀環境和關係。 – itchangry

相關問題