反向查找“ product”,未找到任何参数。尝试了1个模式:[u'products /(?P <product> [-\\ w] +)/ $']

时间:2019-12-17 20:57:13

标签: python django

我正在尝试链接到Django管理员中的页面;我正在使用slugField这样做。我已经在包含名称空间的主“ urls.py”文件中创建了基本URL。然后,我在urls.py文件中声明了我的产品网址,该文件指向我的模板和视图。

index.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 %}

urls.py

urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^(?P<product>[-\w]+)/$', views.product, name='product'),]

views.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>

2 个答案:

答案 0 :(得分:1)

目前尚不清楚为什么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 shell:

$ python manage.py shell

然后尝试从您的一个对象中获取带有ID的网址:

>>> from django.urlresolver import reverse
>>> aproduct = Product.objects.first()
>>> reverse('my-product-view', args=(aproduct.slug,))

我在外壳程序中所做的或多或少是使用您的{% url %}标签在幕后发生的事情,因此这将使我们对问题的根源有一些了解。 如果这不起作用,则说明您的设置有问题。确认您的INSTALLED_APPS包含此urls.py所在的应用。

最后,您看到的错误似乎表明您错过了一种产品的提示(“对没有无参数 ...的产品进行反向搜索”)。通过在您的产品的外壳中进行迭代来确认不是这种情况:

>>> for p in Products.objects.all():
>>>     if not p.slug: 
>>>         print(p)

答案 1 :(得分:0)

感谢您的帮助。事实证明,在我要打开的文档中的其他地方,我引用了没有字符串边界的URL字符串,因此导致错误。

感谢帮助和支持