Как выбрать конкретный объект из модели django и использовать его для получения URL-адреса? (Проект CS50 2)

Я делаю 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)

Это может помочь, если вы добавите свой urls.py.

raphael 16.05.2022 00:22

@raphael я добавил urls.py.

skateb2020 16.05.2022 00:26
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
2
26
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

При использовании тега шаблона {% 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 16.05.2022 00:56

Да, можешь, @skateb2020. Мне нужно увидеть ваши models.py. Взгляните на stackoverflow.com/questions/15306897/….

raphael 16.05.2022 01:04

Я добавил models.py.

skateb2020 16.05.2022 03:58
Ответ принят как подходящий

На самом деле нет необходимости пытаться получить объект категории из модели. Этот код работал для меня.

категория.просмотры

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-адреса, а затем имя аргумента, который вы хотите.

Другие вопросы по теме