gpt4 book ai didi

python - 如何在 Django 模板中显示模型数据

转载 作者:太空狗 更新时间:2023-10-29 23:58:10 24 4
gpt4 key购买 nike

我是 Django 的新手。我正在尝试使用模板在我的索引 View 中显示来 self 的项目模型的数据。我尽力将此应用程序构建为类似于民意调查应用程序。我不确定我做错了什么。我正在使用 python 2.7 和 django 1.8.6

这是我的网址:

from django.conf.urls import url

from . import views

app_name = 'project'
urlpatterns = [
url(r'^$', views.IndexView.as_view(), name='index'),
url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
]

这是我的模型:

import datetime
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
from django.contrib.auth.models import User
from django.utils import timezone


@python_2_unicode_compatible # only if you need to support Python 2
class Contractor(models.Model):
#project
name = models.CharField(max_length=50)
address = models.CharField(max_length=100, blank=True)
phone = models.CharField(max_length=14, blank=True)
city = models.CharField(max_length=60, blank=True)
state = models.CharField(max_length=2, blank=True)
created_by = models.ForeignKey(User, related_name='Contractor_created_by')
created_date = models.DateTimeField()
modified_by = models.ForeignKey(User, related_name='Contractor_modified_by')
modified_date = models.DateTimeField()

def __str__(self):
return self.name

@python_2_unicode_compatible # only if you need to support Python 2
class Project(models.Model):
name = models.CharField(max_length=50)
jobNumber = models.CharField(max_length=8)
shopOut = models.DateTimeField(null=True)
shopIn = models.DateTimeField(null=True)
delivery = models.DateTimeField(null=True)
job1 = models.CharField(max_length=50, null=True)
job2 = models.CharField(max_length=50, null=True)
job3 = models.CharField(max_length=50, null=True)
contractor = models.ForeignKey(Contractor, on_delete=models.CASCADE, default=101)
created_by = models.ForeignKey(User, related_name='Project_created_by')
created_date = models.DateTimeField(auto_now_add=True)
modified_by = models.ForeignKey(User, related_name='Project_modified_by')
modified_date = models.DateTimeField(auto_now=True)
def __str__(self):
return self.name
def save(self, *args, **kwargs):
if not self.id:
self.created_by = User.objects.get(id=1)
self.modified_by = User.objects.get(id=1)
super(Project, self).save(*args, **kwargs)
year = datetime.datetime.now().year
self.jobNumber = '{}{:04d}'.format(year, self.id)
self.modified_by = User.objects.get(id=1)
super(Project, self).save(*args, **kwargs)

这是我的看法:

from django.shortcuts import get_object_or_404, render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from django.views import generic
from django.utils import timezone

from .models import Project

# Create your views here.
class IndexView(generic.ListView):
model = Project
template_name = 'project/index.html'

def get_queryset(self):
return Project.objects

class DetailView(generic.DetailView):
model = Project

这是我的模板:

{% load staticfiles %}
<h1>Projects</h1>
<ul>
{% for projects in project.get_queryset %}
in for loop
<!-- <li><a href="{% url 'projects:detail' projects.id %}">{{ projects.name }}</a></li> -->
<li><a href="#">Test</a></li>
{% endfor %}

</ul>
end of list

当我转到页面时,我得到一个 h1 项目、一个空的 ul 和一行显示“列表结尾”的行

最佳答案

在你的get_queryset , 你应该返回 Project.objects.all() .

在你的模板中,你不需要做 project.get_queryset , get_queryset为您调用方法,并将值作为 object_list 传递给模板和 <objectname>_list ,以及其他参数。在你的例子中,对象是 Project所以应该有一个project_list变量也与 object_list 一起.

你可以这样做:

{% for project in project_list %}
<li><a href="{% url 'projects:detail' project.id %}">{{ project.name }}</a></li>
{% endfor %}

或者:

{% for project in object_list %}
<li><a href="{% url 'projects:detail' project.id %}">{{ project.name }}</a></li>
{% endfor %}

您可以在这里阅读更多相关信息:https://docs.djangoproject.com/en/1.9/ref/class-based-views/generic-display/#listview

关于python - 如何在 Django 模板中显示模型数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35071257/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com