python - 未找到没有参数的“产品”反向。尝试了 1 种模式:[u'products/(?P[-\\w]+)/$']
问题描述
我正在尝试链接到 Django 管理员中的页面;我正在使用 slugField 这样做。我在包含命名空间的主“urls.py”文件中创建了一个基本 URL。然后我在文件中声明了我的产品 url,该urls.py
文件指向我的模板和视图。
索引.html
{% for item in products %}
<div class="col-sm-12 col-md-4 col-lg-4">
<div class="box">
{% if item.image_one %}
<div class="image">
<img src="{{ item.image_one.url }}" alt="{{ item.name }}">
</div>
{% endif %}
<div class="content">
<h4>{{ item.name }}</h4>
<a href="{% url 'products:product' item.slug %}" class="button">View Product</a>
</div>
</div>
</div>
{% endfor %}
网址.py
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<product>[-\w]+)/$', views.product, name='product'),]
视图.py
def product(request, product):
product = get_object_or_404(Product, slug=product)
return render(request, 'products/product.html',{
'product':product,
})
def index(request):
products = Product.objects.all()
return render(request, 'products/index.html',{
'products': products,
})
在 index.html 页面上呈现 HTML:
<section id="products">
<div class="container">
<div class="row">
<div class="col-sm-12 col-md-4 col-lg-4">
<div class="box">
<div class="image">
<img src="/media/temp-image.png" alt="product name">
</div>
<div class="content">
<h4>product name</h4>
<a href="/products/product-name/" class="button">View Product</a>
</div>
</div>
</div>
<div class="col-sm-12 col-md-4 col-lg-4">
<div class="box">
<div class="image">
<img src="/media/temp-image_uQcyyVv.png" alt="Another product">
</div>
<div class="content">
<h4>Another product</h4>
<a href="/products/another-product/" class="button">View Product</a>
</div>
</div>
</div>
</div>
</div>
</section>
解决方案
目前尚不清楚为什么 url 反向失败,但您不应该对管理员执行您正在做的事情。相反,将您的更改urls.py
为不模仿管理员:
url(r'^(?P<product>[-\w]+)/$', views.product, name='my-product-view')
然后,在您的模板中:
<a href="{% url 'my-product-view' item.slug %}" class="button">View Product</a>
如果这不起作用,请确保您可以reverse
手动操作。获取 Django 外壳:
$ python manage.py shell
然后尝试使用您的一个对象中的 id 反转 url:
>>> from django.urlresolver import reverse
>>> aproduct = Product.objects.first()
>>> reverse('my-product-view', args=(aproduct.slug,))
我在上面的 shell 中所做的或多或少是您的{% url %}
标签在幕后发生的事情,因此这将使我们对问题所在的位置有所了解。如果这不起作用,则说明您的设置有问题。确认您INSTALLED_APPS
包含它所在的应用程序urls.py
。
最后,您看到的错误似乎表明您在其中一个产品上缺少一个 slug(“对于没有参数的产品反向......”)。通过在 shell 中迭代您的产品来确认不是这种情况:
>>> for p in Products.objects.all():
>>> if not p.slug:
>>> print(p)
推荐阅读
- python - Python - 如何在 Python 中使用逗号分隔(将一行分成三列)
- mysql - 在 MySQL 中选择最多 5 个结果的多个类别
- c# - 如何预编译 Razor 视图的一部分?
- node.js - Node.JS 中未显示子进程输出
- c++ - C++ 中的字符串到 UTF-8 的转换
- python - 将标签转换回原始编码
- python - 没有在哪里部署 Python Flask API 项目
- r - 绘制气泡图:单个轴上的所有路径项
- python - /profile/ 处的 AttributeError
- asynchronous - 异步 gunicorn 抛出 Cors 问题,但 Sync gunicorn 工作正常