我在应用程序“产品”中的所有网址都重定向到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中的所有代码行,只是为了呈现模板仍未通过,只是带来了产品列表。
答案 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"),
]