Django URL不起作用重定向到单个URL

时间:2019-06-10 11:00:14

标签: python html django

我在应用程序“产品”中的所有网址都重定向到products_list

urls.py
from django.conf.urls import url
from .views import(
        product_list,
        search,
        add_product,
        category_single,
        manage_product_image,
        edit_product,
        download_product,
        single,

        )

app_name = 'products'

urlpatterns = [
    url(r'^', product_list, name='product-list'),
    url(r'^search/',search, name="search"),
    url(r'^add/',add_product,name='add_product'),
    url(r'^category/(?P<slug>.*)/$',category_single,name="category"),
    url(r'^(?P<slug>.*)/images/',manage_product_image,name="manage_product_image"),
    url(r'^(?P<slug>.*)/edit/',edit_product,name="edit_product"),
    url(r'^(?P<slug>.*)/download/(?P<filename>.*)$',download_product,name="download_product"),
    url(r'^(?P<slug>.*)/$',single,name="single_product"),
]

如果我输入http://localhost:8000/products会把我发送到完美的产品列表,但是输入http://localhost:8000/products/add/也会把我发送到不完美的产品列表,应该是添加产品的表格。 views.py

def add_product(request):
    form = ProductForm(request.POST or None)
    if form.is_valid():
        product = form.save(commit=False)
        product.user =  request.user
        product.slug = slugify(form.cleaned_data['title'])
        product.active = False
        product.save()
        return HttpResponseRedirect('/products/%s'%(product.slug))
    context = {
        'form':form,
    }
    return render(request,"products/edit.html",context)

我试图注释view.py中的所有代码行,只是为了呈现模板仍未通过,只是带来了产品列表。

2 个答案:

答案 0 :(得分:3)

您的第一个url(..) [Django-doc]模式是匹配所有内容的模式。确实,正则表达式^匹配所有字符串,因为您仅指定了字符串起始锚。

您还应该添加字符串锚的结尾$):

urlpatterns = [
    url(r'^$', product_list, name='product-list'),
    # ...
]

答案 1 :(得分:1)

在您的第一个url(r'^')中,您需要添加字符串锚($)的结尾 像这样:

urlpatterns = [
    url(r'^$', product_list, name='product-list'),
    # ... All other urls here.
]

此外,为什么不使用类似path(r'^add/', add_product, name='add-product')的东西,而在不需要的地方,则需要这样的字符串锚($)的结尾,如下所示:< / p>

from django.urls import path
from .views import(
        product_list,
        search,
        add_product,
        category_single,
        manage_product_image,
        edit_product,
        download_product,
        single,

        )

app_name = 'products'

urlpatterns = [
    path(r'^$', product_list, name='product-list'),
    path(r'search/',search, name="search"),
    path(r'add/',add_product,name='add_product'),
    path(r'category/(?P<slug>.*)/$',category_single,name="category"),
    path(r'(?P<slug>.*)/images/',manage_product_image,name="manage_product_image"),
    path(r'(?P<slug>.*)/edit/',edit_product,name="edit_product"),
    path(r'(?P<slug>.*)/download/(?P<filename>.*)$',download_product,name="download_product"),
    path(r'(?P<slug>.*)/$',single,name="single_product"),
]