Я делаю CS50 Project 2 и имею модель django под названием Listing, в которой есть объект с именем Category, который пользователь может выбрать, используя раскрывающийся список. Все категории перечислены на странице категорий и должны быть связаны со страницей category_page, которая отображает все списки в этой категории. Можете ли вы помочь мне с href и переменной для страницы категорий, чтобы связать ее со страницей категорий_страниц?
категории views.py
def categories(request):
return render(request, "auctions/categories.html",{
"Miscellaneous": Listings.objects.all().filter(category=Miscellaneous)
})
category.html (мне нужно связать все категории на этой странице с их собственными категориями_страниц.)
{% block body %}
<h1>Categories</h1>
<a href = "{% url 'categories' Miscellaneous.category %}" style = "color: rgb(58, 58, 58);"><h5>Miscellaneous</h5></a>
<h5>Movies and Television</h5>
<h5>Sports</h5>
<h5>Arts and Crafts</h5>
<h5>Clothing</h5>
<h5>Books</h5>
{% endblock %}
категории_просмотры страниц.py
def categories_page(request, category):
listings = Listings.objects.all().filter(category=category)
return render(request, "auctions/categories_page.html",{
"listings": listings,
"heading": category
})
Categories_page.html
{% block body %}
<h1>{{ heading }}</h1>
{% for listing in listings %}
<a href = "{% url 'listing' listing.id %}" style = "color: rgb(58, 58, 58);">
<img src = "{{ listing.image }}" style = "height: 10%; width: 10%;">
<h4 class = "text">{{ listing.title }}</h4>
<h6>Description: {{ listing.description }}</h6>
<h6>Category: {{ listing.category }}</h6>
<h6>Price: ${{ listing.bid }}</h6>
</a>
{% endfor %}
{% endblock %
Просмотры category_page и html работают. У меня проблемы с представлениями категорий и html.
Дайте мне знать, если вам нужен еще код. Большое спасибо!
urls.py
from django.urls import path
from .models import User, Listings
from .forms import ListingsForm
from . import views
urlpatterns = [
path("", views.index, name = "index"),
path("login", views.login_view, name = "login"),
path("logout", views.logout_view, name = "logout"),
path("create", views.create, name = "create"),
path("watchlist", views.watchlist, name = "watchlist"),
path("categories", views.categories, name = "categories"),
path("categories/<str:category>/", views.categories_page, name = "categories_page"),
path("listing/<int:id>/", views.listing, name = "listing"),
path("register", views.register, name = "register")
]
модели.py
class Listings(models.Model):
CATEGORY = [
("Miscellaneous", "Miscellaneous"),
("Movies and Television", "Movies and Television"),
("Sports", "Sports"),
("Arts and Crafts", "Arts and Crafts"),
("Clothing", "Clothing"),
("Books", "Books"),
]
title = models.CharField(max_length=64)
description = models.CharField(max_length=500)
bid = models.DecimalField(max_digits=1000000000000, decimal_places=2)
image = models.URLField(null=True, blank=True)
category = models.CharField(max_length=64, choices=CATEGORY, default=None)
@raphael я добавил urls.py.
При использовании тега шаблона {% url %}
первым параметром является название пути, затем следуют любые параметры. Я думаю, что это одна проблема. Во-вторых, вам нужно выполнить итерацию по набору запросов для доступа к отдельным объектам, как вы это делали в category_page.html, но не в category.html.
Именование может сбивать с толку, например, у вас есть categories
путь с именем categories
с именем categories
, а затем для страницы, на которую вы пытаетесь сослаться, у вас есть categories/<str:category>/
, другими словами, другой путь к категории, на этот раз с аргументами, которые соответствует category_page
и имеет имя categories_page
. Но в вашем шаблоне category.html у вас есть строка,
<a href = "{% url 'categories' Miscellaneous.category %}" style = "color: rgb(58, 58, 58);"><h5>Miscellaneous</h5></a>
Эта строка ищет названиеcategories
, что соответствует views.category
, что, как я полагаю, не то, что вам нужно. Кроме того, Miscellaneous
— это набор запросов, поэтому вам нужно перебирать его, но вы относитесь к нему так, как будто это один объект. Возможно, это может быть такое же простое исправление, как выполнение следующих действий в файле category.html:
{% block body %}
<h1>Categories</h1>
{% for cat in Miscellaneous %}
<a href = "{% url 'categories_page' cat.category %}" style = "color: rgb(58, 58, 58);"><h5>Miscellaneous</h5></a>
{% endfor %}
<h5>Movies and Television</h5>
<h5>Sports</h5>
<h5>Arts and Crafts</h5>
<h5>Clothing</h5>
<h5>Books</h5>
{% endblock %}
есть ли способ отфильтровать модель списка и выбрать все категории в переменной, чтобы использовать их для URL-адреса?
Да, можешь, @skateb2020. Мне нужно увидеть ваши models.py. Взгляните на stackoverflow.com/questions/15306897/….
Я добавил models.py.
На самом деле нет необходимости пытаться получить объект категории из модели. Этот код работал для меня.
категория.просмотры
def categories(request):
return render(request, "auctions/categories.html")
категории.html
<a href = "{% url 'categories_page' 'Miscellaneous' %}" style = "color: rgb(58, 58, 58);"><h5>Miscellaneous</h5></a>
<a href = "{% url 'categories_page' 'Movies and Television' %}" style = "color: rgb(58, 58, 58);"><h5>Movies and Television</h5></a>
<a href = "{% url 'categories_page' 'Sports' %}" style = "color: rgb(58, 58, 58);"><h5>Sports</h5></a>
<a href = "{% url 'categories_page' 'Arts and Crafts' %}" style = "color: rgb(58, 58, 58);"><h5>Arts and Crafts</h5></a>
<a href = "{% url 'categories_page' 'Clothing' %}" style = "color: rgb(58, 58, 58);"><h5>Clothing</h5></a>
<a href = "{% url 'categories_page' 'Books' %}" style = "color: rgb(58, 58, 58);"><h5>Books</h5></a>
Все, что вам нужно сделать, это указать имя URL-адреса, а затем имя аргумента, который вы хотите.
Это может помочь, если вы добавите свой urls.py.