【问题标题】:Django – create pages along with the objects using the same templateDjango – 使用相同的模板创建页面和对象
【发布时间】: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 }}" alt="">
    <h2 align=center>{{ dog.name }} 
        <p>{{ dog.description }}</p>
        </div>
    {% endfor %}

我觉得这应该是一件非常容易的事情,虽然我在互联网上搜索并找不到如何让页面与狗对象一起自动创建。

非常感谢您。

【问题讨论】:

  • 你得到什么错误?
  • 您希望每只狗都有不同的模板吗?或者您想使用模板生成每个狗页面?
  • 第二个。我想用一个模板来生成每只狗的页面。

标签: python django


【解决方案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 }}" alt="">
    <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。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-10
  • 2014-10-12
  • 1970-01-01
相关资源
最近更新 更多