Шаблон Django печатает представление объекта вместо значения объекта

#python #django #templates #view

#python #django #шаблоны #Вид

Вопрос:

views.py

 @login_required 
def ManageDomain(request): 
    AssocNotAuthDomains = Tld.objects.filter(FKtoUser_id=request.user,auth=0)
    AssocAuthDomains = Tld.objects.filter(FKtoUser_id=request.user,auth=1)

    return render(request, 'site/account/template.html', {
         'AssocNotAuthDomains':AssocNotAuthDomains,
         'AssocAuthDomains':AssocAuthDomains
    })
  

template.html

 {% if AssocAuthDomains or AssocNotAuthDomains  %}
<div class="acctDomains">
    <h3 class="Titles"><img src="{% static "img/templated/acct/AuthDomainSm.png" %}" width="22" height="22" alt="Authorized Domain(s)" /> Verified Domains</h3>
    <ul>
    {% for authdomain in AssocAuthDomains %}
        <li>{{ authdomain }}<span><a class="scan" href="/Account/PerformScan/?d={{ authdomain }}">Scan now</span></a></li>
    {% endfor %}
    </ul>
    <h3 class="Titles"><img src="{% static "img/templated/acct/UnAuthDomain.png" %}" width="22" height="22" alt="Unverified Domain(s):" /> Unverified Domains</h3>
    <ul>
    {% for notauthdomain in AssocNotAuthDomains %}
        <li>{{ notauthdomain }}<span><a class="scan" href="Verify Now">Verify now</span></a></li>
    {% endfor %}
    </ul>
</div><!--acctDomains-->
  

Это выводит:

 Tld object (1)

Tld object (2)
  

вместо значения, например websiteabc.com

Что я делаю не так?

Спасибо

Ответ №1:

Вы должны реализовать __str__ в своей модели, если хотите отобразить экземпляр модели подобным образом

 class Tld(models.Model):
    def __str__(self):
        # return something meaningful here like self.some_attribute
  

Или вы должны явно использовать атрибут в шаблоне, подобный этому

  {{ authdomain.some_attribute }}
  

В противном случае python не знает, как получить что-то значимое из объекта для отображения.

Ответ №2:

Это потому, что вы пытаетесь отобразить весь объект, а не значение.

Вам нужно заменить

 {{ notauthdomain }}
  

с

 {{ notauthdomain.name }} 
  

замените ‘name’ именем поля вашего значения — websiteabc.com