【发布时间】:2017-03-13 09:04:28
【问题描述】:
我想构建一个“列表”视图,其中将显示数据库中的所有图像。 这是模板:
{% extends "base.html" %}
{% block title %}Your images{% endblock %}
{% block content %}
<ul>
{% for picture in images %}
<a href="{% url "detail" id=picture.id slug=picture.slug %}">
<img src="{{ picture.image.url }}" class="image-detail">
</a>
{% endfor %}
</ul>
{% endblock %}
以及列表和详细网址:
url(r'^detail/(?P<id>\d+)/(?P<slug>[\w]+)/$',views.image_detail,name='detail')
url(r'^list/$', views.image_list, name='list')
当用户点击图片时,他应该被重定向到该页面的“详细”视图。
def image_detail(request, id, slug):
image = get_object_or_404(Image, id=id, slug=slug)
return render(request,
'images/image/detail.html',
{'section': 'images',
'image': image})
def image_list(request):
images = Image.objects.all()
return render(request,'images/image/list.html',{'images':images})
可以看出,'detail' 视图有 2 个参数:id 和 slug。
在上面的模板中,我得到了相应图片的 id 和 slug (id=picture.id slug=picture.slug) 的这些参数。
在我运行服务器之后,当我尝试访问我网站上的列表页面时,
我收到“NoReverseMatch”错误: 异常值:未找到带有参数“()”和关键字参数“{'id': 1, 'slug': 'django-and-duke'}' 的“详细信息”的反转。尝试了 0 个模式:[].
我启动了 shell,导入了 Image 模型,然后我想检查是否真的没有任何具有该 id 和 slug 的图像。
>>> Image.objects.get(id=1,slug='django-and-duke')
<Image: Django and Duke>
所以实际上有一个带有请求的 id 和 slug 的 Image 对象......这是怎么回事?
编辑:图像模型:
class Image(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,
related_name='images_created')
title = models.CharField(max_length=200)
slug = models.SlugField(max_length=200,
blank=True)
users_like = models.ManyToManyField(settings.AUTH_USER_MODEL,
related_name='images_liked',
blank=True)
image = models.ImageField(upload_to='images',blank=True)
description = models.TextField(blank=True)
created = models.DateField(auto_now_add=True, db_index=True)
objects = models.Manager() # The default manager.
published = PublishedManager() # Our custom manager.
def __str__(self):
return self.title
def save(self, *args, **kwargs):
if not self.slug:
self.slug = slugify(self.title)
super(Image, self).save(*args, **kwargs)
def get_absolute_url(self):
return reverse('images:detail', args=[self.id, self.slug])`
【问题讨论】:
-
这些模式在哪些 urls.py 中?如果它们不在主项目的 urls.py 中,那么您如何包含它们?
-
该错误并不是说该项目不存在,而是说它找不到您的 URL 模式。
-
发布你的模型,那里定义了
get_absolute_url方法吗? -
你的应用有命名空间吗?也许你必须这样写:
<a href="{% url 'namespace:detail' id=picture.id slug=picture.slug %}"> -
@Alasdair 图片应用的 url 包含在项目的 url 中:
url(r'^images/', include('images.urls', namespace='images')),
标签: django image templates url match