首页 > 解决方案 > Django 在给定的 url 上调用错误的函数

问题描述

django 调用“listing”函数,即使我告诉它在处理转到 .../watchlist url 时出现的请求时使用“watchlist”函数。我找不到问题。这是错误:

  File "/home/simon/Dokumente/cs50WebProgramming/commerce/auctions/views.py", line 103, in listing
    listing_obj = AuctionListing.objects.get(id=int(listing_id))
ValueError: invalid literal for int() with base 10: 'watchlist'

网址.py

urlpatterns = [
    path("", views.index, name="index"),
    path("login", views.login_view, name="login"),
    path("logout", views.logout_view, name="logout"),
    path("register", views.register, name="register"),
    path("create", views.create_listing, name="create"),
    path("after_create", views.after_create, name="after_create"),
    path("<str:listing_id>", views.listing, name="listing"),
    path("<str:listing_id>/bid", views.after_bid, name="after_bid"),
    path("watchlist", views.watchlist, name="watchlist")
]

视图.py

def listing(request, listing_id):
    listing_obj = AuctionListing.objects.get(id=int(listing_id))

    return render(request, "auctions/listing.html", {
        "listing": listing_obj
    })

def watchlist(request):
    return render(request, "auctions/watchlist.html")

标签: pythondjango

解决方案


问题在于您的 URL 路径的顺序。您<str:listing_id>之前watchlist有导致任何字符串路径与<str:listing_id>. 只需重新排序你的路径,你应该没问题:

urlpatterns = [
    path("", views.index, name="index"),
    path("login", views.login_view, name="login"),
    path("logout", views.logout_view, name="logout"),
    path("register", views.register, name="register"),
    path("create", views.create_listing, name="create"),
    path("after_create", views.after_create, name="after_create"),
    path("watchlist", views.watchlist, name="watchlist")
    path("<str:listing_id>/bid", views.after_bid, name="after_bid"),
    path("<str:listing_id>", views.listing, name="listing"),
]

推荐阅读