Django- 从模型(在 app1 中)打印 html(在 app2 中)的数据
Django- Print data in html (in app2) from model (in app1)
我在应用程序中定义了一个模型。
然后我想看到 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.htmlAPP2
像
{% 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})
它 returns TypeError 在 /homepage/prova/ - show_elementi() 缺少 1 个必需的位置参数:'id'
我该如何解决这个问题?
get_object_or_404
只能检索一个对象。如果有多个元素匹配,则会抛出异常。
要检索多个元素,您可以使用:
elementimenu = ElementiTab.objects.all()
如果你想在没有对象时return 404:
from django.http import Http404
# ...
def show_elementi(request, id):
elementimenu = ElementiTab.objects.all()
if not elementimenu:
throw Http404()
# ...
您不需要使用 get_object_or_404()
快捷方式:
def show_elementi(request):
elementimenu = ElementiTab.objects.all()
return render_to_response('homepage/prova.html',
{'elementimenu': elementimenu})
我在应用程序中定义了一个模型。 然后我想看到 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.htmlAPP2 像
{% 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})
它 returns TypeError 在 /homepage/prova/ - show_elementi() 缺少 1 个必需的位置参数:'id'
我该如何解决这个问题?
get_object_or_404
只能检索一个对象。如果有多个元素匹配,则会抛出异常。
要检索多个元素,您可以使用:
elementimenu = ElementiTab.objects.all()
如果你想在没有对象时return 404:
from django.http import Http404
# ...
def show_elementi(request, id):
elementimenu = ElementiTab.objects.all()
if not elementimenu:
throw Http404()
# ...
您不需要使用 get_object_or_404()
快捷方式:
def show_elementi(request):
elementimenu = ElementiTab.objects.all()
return render_to_response('homepage/prova.html',
{'elementimenu': elementimenu})