如何从 django 模型表单中获取一个 id,将其用作 url,并从该表单的值中获取所有数据?
How do you take an id from a django model form, use it as the url, and get all the data from that value from the form?
我正在做 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,我希望 listings 变量只获取该项目的对象,但我不确定该怎么做。
如果您需要更多代码,请告诉我。非常感谢您的帮助!
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 %}
我知道我必须更改 listing.html 一旦我弄清楚如何让 id 只显示该 id 的对象,但暂时这是我的 listing.html
我在这里做了很多假设,所以很抱歉,但我认为页面未找到错误和你原来的问题是相关的,我认为这一切都归结为两种不同的观点,两种不同的 url 路径,以及两个不同的模板。一个 view/path/template 用于 all listings(复数),另一个 view/path/template 用于单个 listing(单数)。
首先你需要 urls:
path("listings/", views.listings, name = "listings"),
path("listing/<int:id>/", views.listing, name = "listing"),
您已经拥有的东西似乎属于列表s view/path/template,并进行了一些修改。 listings 视图将没有 id,因为它将显示 all 个列表(请注意,我将所有这些更改为 listings 而不是列表,所以我不会将此与处理特定列表项的单个列表的视图混淆:
def listings(request):
return render(request, "auctions/listings.html",{
"listings": Listings.objects.all()
})
此视图可以与您的列表s 模板一起使用(请注意,我将名称从 listing.html 更改为列表s .html,因为 listing.html 会处理特定的列表,而 listings.html 会列出所有列表)。另请注意 <a href="{% url 'listing' listing.id %}">
部分,这是神奇的部分,其中 url 将使用特定列表的 id 创建(请注意,视图的 name 位于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 %}
现在转到特定列表的详细信息页面,上面生成的 link 会将用户带到该页面。
def listing(request, id):
listing = Listings.objects.get(id=id)
return render(request, "auctions/listing.html",{
"listing": listing
})
接下来您必须创建一个名为 listing.html
的模板,您可以在其中显示特定列表的所有详细信息。
CS50 Web Programming 课程很棒,也很难。对我帮助很大的是阅读 notes, and also stopping the video 并编写他演示的代码。所有的答案都在那里。只是一个建议;每个人的学习方式都不一样。祝你好运!
我正在做 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,我希望 listings 变量只获取该项目的对象,但我不确定该怎么做。
如果您需要更多代码,请告诉我。非常感谢您的帮助!
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 %}
我知道我必须更改 listing.html 一旦我弄清楚如何让 id 只显示该 id 的对象,但暂时这是我的 listing.html
我在这里做了很多假设,所以很抱歉,但我认为页面未找到错误和你原来的问题是相关的,我认为这一切都归结为两种不同的观点,两种不同的 url 路径,以及两个不同的模板。一个 view/path/template 用于 all listings(复数),另一个 view/path/template 用于单个 listing(单数)。
首先你需要 urls:
path("listings/", views.listings, name = "listings"),
path("listing/<int:id>/", views.listing, name = "listing"),
您已经拥有的东西似乎属于列表s view/path/template,并进行了一些修改。 listings 视图将没有 id,因为它将显示 all 个列表(请注意,我将所有这些更改为 listings 而不是列表,所以我不会将此与处理特定列表项的单个列表的视图混淆:
def listings(request):
return render(request, "auctions/listings.html",{
"listings": Listings.objects.all()
})
此视图可以与您的列表s 模板一起使用(请注意,我将名称从 listing.html 更改为列表s .html,因为 listing.html 会处理特定的列表,而 listings.html 会列出所有列表)。另请注意 <a href="{% url 'listing' listing.id %}">
部分,这是神奇的部分,其中 url 将使用特定列表的 id 创建(请注意,视图的 name 位于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 %}
现在转到特定列表的详细信息页面,上面生成的 link 会将用户带到该页面。
def listing(request, id):
listing = Listings.objects.get(id=id)
return render(request, "auctions/listing.html",{
"listing": listing
})
接下来您必须创建一个名为 listing.html
的模板,您可以在其中显示特定列表的所有详细信息。
CS50 Web Programming 课程很棒,也很难。对我帮助很大的是阅读 notes, and also stopping the video 并编写他演示的代码。所有的答案都在那里。只是一个建议;每个人的学习方式都不一样。祝你好运!