【问题标题】:Django- Print data in html (in app2) from model (in app1)Django-从模型(在app1中)以html(在app2中)打印数据
【发布时间】:2015-05-13 08:44:41
【问题描述】:

我在应用中定义了一个模型。 然后我想把 ElementiTab 看成不同应用的 html。

models.py APP1(命名为 simpleapp)

from django.db import models
from django.utils import timezone
from simpleapp.oper import add_divide
from django.conf import settings



class ElementiTab(models.Model):
    author = models.ForeignKey('auth.User', null=True, blank=False)
    des = models.CharField(max_length=30)
    x = models.FloatField()
    y = models.FloatField()
    res = models.FloatField(default=0)
    created_date = models.DateTimeField(default=timezone.now)

    def save(self, *args, **kwargs):
        self.res = add_divide(self.x, self.y)
        super(ElementiTab, self).save(*args, **kwargs)


    def __str__(self):
        return self.des

prova.html APP2 类似的东西

{% for elementi in elementimenu %}
    <div class="elementi">
        <tr>
            <td>{{elementi.des}}</td> 
            <td>{{elementi.x}}</td>
            <td>{{elementi.y}}</td>
            <td>{{elementi.res}}</td>
            <td>{{elementi.created_date}}</td>
            <td>{{elementi.author}}</td>
        </tr>
     </div>
{% endfor %}

A) views.py APP2

from simpleapp.models import ElementiTab    
def show_elementi(request):
        elementimenu = get_object_or_404(ElementiTab)
        return render_to_response('homepage/prova.html',{'elementimenu': elementimenu})

给我MultipleObjectsReturned at /homepage/prova/ - get() 返回多个 ElementiTab - 它返回 3!(此时在我的数据库中有 3 行)

如果我写: B) views.py APP2

from simpleapp.models import ElementiTab 
#from ....   
def show_elementi(request,id):
        elementimenu = get_object_or_404(ElementiTab,pk=id)
        return render_to_response('homepage/prova.html',{'elementimenu': elementimenu})

它返回 TypeError at /homepage/prova/ - show_elementi() 缺少 1 个必需的位置参数:'id'

我该如何解决这个问题?

【问题讨论】:

  • 我对否决票感到失望,因为我是 django 的新手,也许对某些人来说这似乎是一个愚蠢的问题,但 也许这对初学者很重要...
  • 如果有用的话,我是这样执行的:link

标签: html django database django-models import


【解决方案1】:

你不需要使用get_object_or_404()快捷方式:

def show_elementi(request):
    elementimenu = ElementiTab.objects.all()
    return render_to_response('homepage/prova.html',
                              {'elementimenu': elementimenu})

【讨论】:

  • 谢谢,它有效!我尝试了不同的方法,但我认为有必要以某种方式调用带有 id 的对象,就像我之前所做的那样,以删除选定的项目。
【解决方案2】:

get_object_or_404 只能检索一个对象。如果匹配的元素不止一个,则会抛出异常。

要检索多个元素,您可以使用:

elementimenu = ElementiTab.objects.all()

如果你想在没有对象的时候返回404:

from django.http import Http404
# ...
def show_elementi(request, id):
    elementimenu = ElementiTab.objects.all()
    if not elementimenu:
        throw Http404()
    # ...

【讨论】:

  • 带有 'id' 时会出错。它适用于没有 id 的 @catavaran 解决方案。但是感谢您对 get_object_or_404 的解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-29
  • 2014-08-07
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多