我正在做CS50项目2,需要做一个网页,在通过url的id和检索有关该特定项目的所有信息从数据库显示在网页上。
def listing(request, id):
id = Listings.objects.get(id=2)
return render(request, "auctions/listing.html",{
"listings": Listings.objects.all()
})
这是我当前的代码。我试图通过变量获取url参数中的id,并且我希望列表变量仅获取该项目的对象,但我不完全确定如何做到这一点。
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("listings/<int:id>/", views.listing, name = "listing"),
path("register", views.register, name="register")
]
listing.html
{% extends "auctions/layout.html" %}
{% block body %}
{{% for listing in listings %}
<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>
{% endfor %}
{% endblock %}
我知道,一旦我弄清楚如何让id只显示该id的对象,我将不得不更改listing.html,但目前这是我的listing.html。
我在这里做了很多假设,所以道歉,但我认为页面没有发现错误和你原来的问题是相关的,我认为这一切都归结为使两个不同的视图,两个不同的url路径,和两个不同的模板。所有的一个视图/路径/模板清单s(复数),以及用于单独列表的另一个视图/路径/模板(单数)。
首先是你需要的url:
path("listings/", views.listings, name = "listings"),
path("listing/<int:id>/", views.listing, name = "listing"),
您已经拥有的看起来应该属于清单s查看/path/template,做一些修改。清单s视图将没有id,因为它将显示所有清单(注意,我将所有这些更改为清单s)。而不是listing,这样我就不会把它和视图搞混了,后者会处理特定列表项的单个列表:
def listings(request):
return render(request, "auctions/listings.html",{
"listings": Listings.objects.all()
})
这个视图可以与您的清单s一起使用模板(注意,我将名称从listing.html更改为listings)因为listing.html将处理特定的清单,而listing.html将列出所有清单)。还要注意<a href="{% url 'listing' listing.id %}">
部分,这是一个神奇的部分,其中url将与特定列表的id创建(注意,视图的名称在url单词之后,并且id不有引号-它将被添加到生成的url参数):
{% extends "auctions/layout.html" %}
{% block body %}
{{% for listing in listings %}
<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 href="{% url 'listing' listing.id %}">link to this particular listing's page</a>
{% endfor %}
{% endblock %}
现在进入特定清单的详细信息页面,上面生成的链接将把用户带到。
def listing(request, id):
listing = Listings.objects.get(id=id)
return render(request, "auctions/listing.html",{
"listing": listing
})
接下来,您必须创建一个名为listing.html
的模板,可以在其中显示特定清单的所有详细信息。CS50 Web编程课程非常棒,而且非常难。对我帮助很大的是阅读笔记,并停止视频并编写他演示的代码。所有的答案都在那里。只是一个建议;每个人学习的方式都不一样。好运!