Django – 使用相同的模板创建页面和对象
Posted
技术标签:
【中文标题】Django – 使用相同的模板创建页面和对象【英文标题】:Django – create pages along with the objects using the same template 【发布时间】:2016-07-31 21:37:12 【问题描述】:这是我第一次来这里。
我在 Django 中遇到了一个小问题。我正在为一个狗窝写一个网页,我有一个狗模型。这些狗在管理页面中创建后出现在首页上。我需要它,以便在单击首页上的任何狗图片后,您可以访问他们的个人资料(在 URL 中带有狗的名字),该个人资料应该为每个人使用一个模板。
这是我在模型、视图和网址中的代码:
models.py
class dog(models.Model):
name = models.CharField(max_length=30, blank=False, null=True)
main_image = models.ImageField(upload_to='dogs', blank=False, null=True)
MALE = 'ML'
FEMALE = 'FM'
gender_list = (
(MALE, 'male'),
(FEMALE, 'female'),
)
gender = models.CharField(max_length=2, choices=gender_list, default='gender')
description = models.TextField(max_length=500, blank=False, null=True)
birthday = models.DateField(default=datetime.today, blank=True)
slug = AutoSlugField(populate_from='name')
views.py
def home(request):
dog_list = list(dog.objects.all())
template = 'home.html'
return render(request, template, 'dogs' : dog_list)
def dog_view(request, slug):
dog_view = get_object_or_404(dog, slug=slug)
return render(request, 'profile.html', 'dog_view' : dog_view)
urls.py
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^dogs/(?P<slug>[-\w]+)/$', views.dog_view, name='profile'),
url(r'^mating/', views.mating_list, name='mating'),
url(r'^admin/', admin.site.urls),
]
home.html
% for dog in dogs %
<a href="% url 'profile' % dog.name ">
<div class="col-sm-4">
<img class="img-circle img-responsive img-center" src=" dog.main_image.url " >
<h2 align=center> dog.name
<p> dog.description </p>
</div>
% endfor %
我觉得这应该是一件非常容易的事情,虽然我在互联网上搜索并找不到如何让页面与狗对象一起自动创建。
非常感谢您。
【问题讨论】:
你得到什么错误? 您希望每只狗都有不同的模板吗?或者您想使用模板生成每个狗页面? 第二个。我想用一个模板来生成每只狗的页面。 【参考方案1】:试试这个:
views.py
def home(request):
dog_list = dog.objects.all()
template = 'home.html'
return render(request, template, 'dogs' : dog_list)
def dog_view(request, slug):
dog_view = get_object_or_404(dog, slug=slug)
return render(request, 'profile.html', 'dog_view' : dog_view)
home.html
% for dog in dogs %
<a href="% url 'profile' dog.name %"> dog.name </a>
<div class="col-sm-4">
<img class="img-circle img-responsive img-center" src=" dog.main_image.url " >
<h2 align=center> dog.name
<p> dog.description </p>
</div>
% endfor %
urls.py
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^dogs/(?P<slug>[-\w]+)/$', views.dog_view, name='profile'),
url(r'^mating/', views.mating_list, name='mating'),
url(r'^admin/', admin.site.urls),
]
【讨论】:
还是不行。狗没有出现在页面上。我将 home.html 添加到问题中。它也开始给我 NoReverseMatch 错误:Reverse for 'profile' with arguments '()' and keyword arguments '' not found。尝试了 1 种模式:['dogs/(?P以上是关于Django – 使用相同的模板创建页面和对象的主要内容,如果未能解决你的问题,请参考以下文章
Django4.3_templates模板之继承标签extends和include添加标签