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[-\\w]+)/$'] 非常感谢!它终于奏效了。现在我需要找出如何让每个狗页面都了解使用什么狗对象来获取信息。但我会尝试自己做到这一点。再次感谢@Tushortz。

以上是关于Django – 使用相同的模板创建页面和对象的主要内容,如果未能解决你的问题,请参考以下文章

Django4.3_templates模板之继承标签extends和include添加标签

显示相同占位符内容的 Django-CMS apphook 模板

Django模板:如何在页面上完整转储对象

django上的几个页面(在不同的应用程序中)相同的块

django模板的导入

Python/Django 通过循环从变量创建几个类