Как составить карту путей в Django 2.1 2018 - PullRequest
0 голосов
/ 25 августа 2018
# My app path
urlpatterns = [
  path("", views.home, name="home"),
  path("show_category/<slug:category_slug>/", views.show_category, name="catalog_category"),
  path("<slug:product_slug>/", views.show_product, name="catalog_product")
]

def show_category(request, category_slug):
  context={
  "c" : get_object_or_404(Category, slug=category_slug),
  "products" : c.product_set.all(),
  "page_title" : c.name,
  }
  template_name="catalog/category.html"
  return render(request, template_name, context)

# Project path
urlpatterns = [
    path("admin/", admin.site.urls),
    path("", include("catalog.urls")),
    path("catalog/", include("catalog.urls")),
    path("cart/", include("cart.urls")),
]

Я не вижу ни одного из своих URL, кроме своей домашней страницы, и я новичок в django. Я не вижу никакой документации по этому вопросу или чего-либо еще в stackoverflow. Любая помощь будет отличной.Я не хочу делать регулярные выражения, но пытаюсь научиться делать URL-адреса как путями, так и репатами.Спасибо!

Ответы [ 2 ]

0 голосов
/ 26 августа 2018

Многое из того, что у вас есть, не нужно или неправильно. Исправьте все, что у вас есть в этом. Обратите внимание на мои комментарии. Я предполагаю, что ваши HTML-шаблоны находятся в правильном месте, поэтому они отображаются правильно.

ПРОЕКТ КОРНЯ:

# urls.py
urlpatterns = [
    path("admin/", admin.site.urls),
    path("", views.home, name="home"),     # this makes yourwebsite.com/ the home page... Don't include yourwebsite.com/catalog/ twice, cause that's what you had.
    path("catalog/", include("catalog.urls")),
    path("cart/", include("cart.urls")),
]

# views.py
def home(request):
    return render(request, 'template_name.html')

ПРИЛОЖЕНИЕ ВАШ КАТАЛОГ:

# urls.py

app_name = "catalog_app"
# all html templates linking to catalog/ must now use the following pattern: {% url 'catalog_app:name_argument' %}... examples follow...

urlpatterns = [
  path("", views.catalog_home, name="catalog_home"),    # goes website.com/catalog/, and must be referenced as {% url 'catalog_app:catalog_home' %} in html templates
  path("show_category/<slug:category_slug>/", views.show_category, name="show_category"),    # goes to website.com/catalog/show_category/category_slug/
  path("<slug:product_slug>/", views.show_product, name="catalog_product")
]


# views.py

from .models import YourCategoryClassModel

def show_category(request, category_slug):
    # the following .get() requires you to have an instance already created in the admin panel for it to work. Otherwise it won't work and you'll get errors.
    your_model_value = YourCategoryClassModel.objects.get(id=category_slug)
    return render(request, 'your_template.html', {'your_model_key': your_model_value})


# your_template.html

<p>{{ your_model_key.attribute_name }}</p>
<p>{{ your_model_key.whatever_you_called_them }}</p>
<p>{{ your_model_key.lowercaserelatedmodelname_set.any_method_or_attribute_for_that_model }}</p>
<!-- Or you can use the following -->
<p>{{ your_model_key.lowercaserelatedmodelname_set.all }}</p>

Таким образом, для вышеприведенного шаблона, если у вас есть класс Parent и класс Child, связанные с родителем полем ForeignKey, шаблон будет выглядеть так:

<p>{{ your_model_key.child_set.all }}</p>
0 голосов
/ 26 августа 2018

Попробуйте поместить функцию show_category в файл views.py, а не urls.py.

...