ReverseNotFound - 无法将详细信息视图连接到列表视图
ReverseNotFound - Can't connect Detail View to List View
当我尝试转到 asset_list 视图时,它挂在 get_absolute_url()
上并抛出错误
Reverse for 'asset_detail' with keyword arguments '{'id': 1}' not found. 1 pattern(s) tried: ['en/marketing/$/<int:id>/']
我在网站周围使用了这个资产应用程序的一堆实例,每个实例都将根据标签属性提供一些不同的资产。 Apphooks 工作得很好,一切都附加在 cms 中。在我开始尝试详细视图之前,我一切正常。我想我有两个问题,一个是 get_absolute_url
,另一个是 urls.py
这就是我的
urls.py
from django.conf.urls import url, include
from .views import AssetListView, AssetDetailView
app_name = 'assets'
urlpatterns = [
# List View
url(r'^$', AssetListView, name="asset_list"),
url(r'^$/<int:id>/', AssetDetailView, name='asset_detail')
]
models.py
class Asset(models.Model):
name = models.CharField(max_length=50, blank=False)
description = PlaceholderField('asset_description')
asset_category = models.ManyToManyField(Asset_Category, blank=True)
tag = models.ManyToManyField(Tag, blank=True)
product_category = models.ManyToManyField(Category, blank=True)
product_series = models.ManyToManyField(Series, blank=True)
product_line = models.ManyToManyField(Line, blank=True)
product = models.ManyToManyField(Product, blank=True)
url = models.CharField(max_length=250, blank=True, verbose_name='Video URL')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
is_active = models.BooleanField(default=True)
def get_absolute_url(self):
return reverse("assets:asset_detail", kwargs={"id": self.id})
views.py
def AssetListView(request, *args, **kwargs):
path = os.path.basename(os.path.normpath(request.path))
print(path)
page_obj = Title.objects.filter(slug=path).first()
print (page_obj)
for obj in Tag.objects.all():
print (obj.name)
if obj.name == page_obj.title:
queryset = Asset.objects.filter(tag=obj.id)
context = {
'object_list': queryset,
}
return render(request, 'asset_view.html', context)
queryset = Asset.objects.all()
context = {
'object_list': queryset,
}
return render(request, 'asset_view.html', context)
def AssetDetailView(request, *args, **kwargs):
return HttpResponse('<h1>AssetDetailView<h1>')
asset_view.html
{% extends "base.html" %}
{% load cms_tags %}
{% block content %}
{% placeholder "content" %}
<ul>
{% for obj in object_list %}
<li>
<a href="{{obj.get_absolute_url}}">{{ obj.name }}</a>
</li>
{% endfor %}
</ul>
{% endblock content %}
URL无效,这里不能把$
锚点放在中间,因为$
表示end字符串。此外,由于您使用 url(..)
这应该是一个正则表达式,例如:
url(r'^<b>(?P\d+)</b>/$', AssetDetailView, name='asset_detail')
请注意,PEP-8 建议将函数名称写成小写字母,并在单词之间加上下划线,因此我建议将您的函数重命名为 asset_detail_view
和 asset_list_view
。
当我尝试转到 asset_list 视图时,它挂在 get_absolute_url()
上并抛出错误
Reverse for 'asset_detail' with keyword arguments '{'id': 1}' not found. 1 pattern(s) tried: ['en/marketing/$/<int:id>/']
我在网站周围使用了这个资产应用程序的一堆实例,每个实例都将根据标签属性提供一些不同的资产。 Apphooks 工作得很好,一切都附加在 cms 中。在我开始尝试详细视图之前,我一切正常。我想我有两个问题,一个是 get_absolute_url
,另一个是 urls.py
这就是我的
urls.py
from django.conf.urls import url, include
from .views import AssetListView, AssetDetailView
app_name = 'assets'
urlpatterns = [
# List View
url(r'^$', AssetListView, name="asset_list"),
url(r'^$/<int:id>/', AssetDetailView, name='asset_detail')
]
models.py
class Asset(models.Model):
name = models.CharField(max_length=50, blank=False)
description = PlaceholderField('asset_description')
asset_category = models.ManyToManyField(Asset_Category, blank=True)
tag = models.ManyToManyField(Tag, blank=True)
product_category = models.ManyToManyField(Category, blank=True)
product_series = models.ManyToManyField(Series, blank=True)
product_line = models.ManyToManyField(Line, blank=True)
product = models.ManyToManyField(Product, blank=True)
url = models.CharField(max_length=250, blank=True, verbose_name='Video URL')
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
is_active = models.BooleanField(default=True)
def get_absolute_url(self):
return reverse("assets:asset_detail", kwargs={"id": self.id})
views.py
def AssetListView(request, *args, **kwargs):
path = os.path.basename(os.path.normpath(request.path))
print(path)
page_obj = Title.objects.filter(slug=path).first()
print (page_obj)
for obj in Tag.objects.all():
print (obj.name)
if obj.name == page_obj.title:
queryset = Asset.objects.filter(tag=obj.id)
context = {
'object_list': queryset,
}
return render(request, 'asset_view.html', context)
queryset = Asset.objects.all()
context = {
'object_list': queryset,
}
return render(request, 'asset_view.html', context)
def AssetDetailView(request, *args, **kwargs):
return HttpResponse('<h1>AssetDetailView<h1>')
asset_view.html
{% extends "base.html" %}
{% load cms_tags %}
{% block content %}
{% placeholder "content" %}
<ul>
{% for obj in object_list %}
<li>
<a href="{{obj.get_absolute_url}}">{{ obj.name }}</a>
</li>
{% endfor %}
</ul>
{% endblock content %}
URL无效,这里不能把$
锚点放在中间,因为$
表示end字符串。此外,由于您使用 url(..)
这应该是一个正则表达式,例如:
url(r'^<b>(?P\d+)</b>/$', AssetDetailView, name='asset_detail')
请注意,PEP-8 建议将函数名称写成小写字母,并在单词之间加上下划线,因此我建议将您的函数重命名为 asset_detail_view
和 asset_list_view
。