URL-адреса Django не работают перенаправления на один URL - PullRequest
1 голос
/ 10 июня 2019

Все мои URL в приложении "продукты" перенаправляются на 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 ]

3 голосов
/ 10 июня 2019

Ваш первый url(..) [Django-doc] шаблон - это шаблон, который соответствует всему. Действительно, регулярное выражение ^ соответствует всем строкам, поскольку вы указываете только начальный якорь строки.

Вы также должны добавить конец строки привязки ($):

urlpatterns = [
    url(<b>r'^$'</b>, product_list, name='product-list'),
    # ...
]
1 голос
/ 10 июня 2019

В вашем первом url(r'^') вам нужно добавить конец привязки строки ($) Примерно так:

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

Кроме того, почему бы вам не использовать что-то вроде path(r'^add/', add_product, name='add-product'), где вы не нуждаетесь в конце привязки строки ($) , например:

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"),
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...