【问题标题】:Getting NoReverseMatch even though url patterns are correct?即使 url 模式正确,也获得 NoReverseMatch?
【发布时间】:2021-01-24 04:28:52
【问题描述】:

我已经学习 Django 一个月了,如果我做了一些愚蠢的事情,我深表歉意,但是,当我尝试在 url '/profile 下呈现“个人资料”页面时,我收到了 NoReverseMatch Reverse for 'profile' with arguments '('',)' not found. 1 pattern(s) tried: ['profile/(?P<use>[^/]+)$'] 错误/[a user's name]',我很确定我所有的路径/模式都是正确的??这是我的代码,有人可以帮我吗?我所有其他 url 模式都可以正常工作。这条路径之前也很好用,我只是将“user”变量重命名为“use”,就发生了这种情况。

urls.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("profile/<str:use>", views.profile, name="profile"),
    path("following", views.following, name="following"),

    #api
    path('', include(router.urls)),
]

views.py:

def profile(request, use):
    currentuser = str(request.user)
    followers = []
    following = []
    for follow in Follow.objects.filter(following=use):
        followers.append(follow.person)
    for item in Follow.objects.filter(person=use):
        following.append(item.following)
    follower_count = len(followers)
    following_count = len(following)
    try:
        Follow.objects.get(person=currentuser, following=use)
        followed = True
    except:
        followed = False
    post_list = Post.objects.filter(user=use)
    dates = []
    for post in post_list:
        dates.append(post.timestamp)
    dates.sort(key = lambda date: datetime.strptime(date, '%B %d, %Y, %I:%M %p'), reverse=True)
    formattedlist = []
    for date in dates:
        postobject = Post.objects.get(timestamp=date)
        formattedlist.append(postobject)
    paginatorlist = Paginator(formattedlist, 10)
    now_page_content = paginatorlist.page(1)
    nowpage = 1
    if request.method == "POST":
        # Update the database
        followbutton = request.POST.get("button")
        button = request.POST.get("nav-button")
        pagenum = request.POST.get("pg")
        if followbutton:
            if followbutton == "Follow":
                followid = Follow.objects.all().count() + 1
                person = currentuser
                following = use
                newfollow = Follow(followid, person, following)
                newfollow.save()
                return HttpResponseRedirect(f"/profile/{use}")
            else:
                deletefollow = Follow.objects.get(person=currentuser, following=use)
                deletefollow.delete()
                return HttpResponseRedirect(f"/profile/{use}")
        else:
            currentpage = paginatorlist.page(pagenum)
            if button == 'Previous':
                if pagenum == '1':
                    return render(request, "network/profile.html", {
                        "formattedlist": now_page_content, "currentnumber": nowpage, "message":'No previous page', "use": use, "currentuser": currentuser, "follower_count": follower_count, "following_count": following_count, "followed": followed,
                    })
                else:
                    nowpage = int(pagenum)-1
                    now_page_content = paginatorlist.page(nowpage)
                    return render(request, "network/profile.html", {
                        "formattedlist": now_page_content, "currentnumber": nowpage, "use": use, "currentuser": currentuser, "follower_count": follower_count, "following_count": following_count, "followed": followed,
                    })
            else:
                if currentpage.has_next() == False:
                    return render(request, "network/profile.html", {
                        "formattedlist": currentpage, "currentnumber": pagenum, "message":'No next page', "use": use, "currentuser": currentuser, "follower_count": follower_count, "following_count": following_count, "list": formattedlist, "followed": followed,
                    })
                else:
                    nowpage = int(pagenum)+1
                    now_page_content = paginatorlist.page(nowpage)
                    return render(request, "network/profile.html", {
                        "formattedlist": now_page_content, "currentnumber": nowpage, "use": use, "currentuser": currentuser, "follower_count": follower_count, "following_count": following_count, "followed": followed,
                    })
    return render(request, "network/profile.html", {
        "use": use, "currentuser": currentuser, "follower_count": follower_count, "following_count": following_count, "followed": followed, "formattedlist": now_page_content, "currentnumber": nowpage,
    })

network/profile.html

    {% extends "network/layout.html" %}
    {% block body %}
        <script src="http://127.0.0.1:8000/static/network/network.js"></script>
        <div>
            <h2 class="profiletext">{{use}}'s profile page</h2>
            {{use}}
            {% if message %}
                <h6 style="color: red; margin-left: 10px">{{message}}</h6>
            {% endif %}
            <h5 class="profiletext">Follows: {{follower_count}} // Following: {{following_count}}</h5>
            {% if use != currentuser %}
                <form method="POST" class="profiletext" action="{% url 'profile' use %}">
                    {% csrf_token %}
                    {% if followed == False %}
                        <input type="submit" value="Follow" name="button">
                    {% else %}
                        <input type="submit" value="Unfollow" name="button">
                    {% endif %}
                </form>
            {% endif %}
        </div>
            {% for post in formattedlist %}
            <div class="post">
                <h5><a href="{% url 'profile' post.use %}">{{post.use}}</a></h5>
                <h6 style="font-weight: 60" class="edit"><a>Edit</a></h6>
                <h4 class="content" style="font-size: 16px;">{{post.content}}</h4>
                <h6 style="color: #d3d3d3; font-weight: 50">{{post.timestamp}}</h6>
                <h1 class="hidden">{{post.id}}</h1>
                {% if user.is_authenticated %}
                    <img src="https://cdn.shopify.com/s/files/1/0649/0603/products/bigo-0002-GH-8-bit-heart_grande.jpeg?v=1410449344">
                    <h2 class="likes">TODO</h2>
                {% endif %}
            </div>
        {% endfor %}
        <div>
            <form class="pagination" method="POST" action="{% url 'profile' use %}">
                {% csrf_token %}
                <input type="submit" value="Previous" class="page-link" name="nav-button"> 
                <input type="submit" value="Next" class="page-link" name="nav-button" >
                <input type="text" value={{currentnumber}} class="pagenumber" name="pg">
            </form>
        </div>
    {% endblock %}

【问题讨论】:

    标签: python html django url django-templates


    【解决方案1】:

    我假设您没有从 Post 模型更改 user 外键。所以,我猜你的错误来自这一行:

    <h5><a href="{% url 'profile' post.use %}">{{post.use}}</a></h5>
    

    所以,应该是这样的:

    <h5><a href="{% url 'profile' post.user %}">{{ post.user }}</a></h5>
    

    【讨论】:

      猜你喜欢
      • 2020-02-14
      • 2013-06-29
      • 2023-03-10
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多