【问题标题】:django url not matching right url with reverse match errordjango url 与反向匹配错误的正确 url 不匹配
【发布时间】:2021-06-21 21:11:57
【问题描述】:

我在我的 django 项目中遇到非常不寻常的错误,因为 django 读取了未在单击的 href 标记中说明的错误 url。要导航到的页面只是一个具有简单 url 模式的页面,而它正在导航到的页面需要两个用于反向匹配的参数,这些参数预计不会提供,这会导致错误:

未找到带有参数“(”,“”)的“搜索朋友详细信息”的反向操作。尝试了 1 种模式:['chat/search\-friend\-detail/(?P[^/]+)/(?P[^/]+)/$']

urls.py:

 urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('users.urls')),
    path('posts/home.html', p_views.PostsListView.as_view(), name='posts-home'),
    path('friends/search.html', f_views.search, name='friends-search'),
    path('friends/add-friend/', f_views.SearchDetail, name='friends-search-detail'),
    path('friends/accept-requests/', f_views.AcceptRequests, name='accept-requests'),
    path('friends/accept-requests-detail/', f_views.AcceptRequestsDetail, name='accept-requests-detail'),
    path('chat/chatt.html', pc_views.SearchChat, name='chat-search'),
    path('chat/search-friend-detail/<str:username>/<str:usernamee>/', pc_views.SearchChatDetail, name='search-friend-detail'),
]

“聊天搜索”是我希望通过此链接在 base.html 文件中导航到的实际网址:

<a href="{% url 'chat-search' %}"><i class="fa fa-envelope"></i></a>

而是奇迹般地导航到最后一个网址,即“搜索朋友搜索”。 虽然链接在我的 chatt.html 文件中:

<a class="mr-2" href="{% url 'search-friend-detail' results.Accepter.username results.Added.username %}">{{ results.Added.username }}</a>

编辑:为清楚起见,完整的 chatt.html 文件;

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            b{% extends "posts/base.html" %}
{% load crispy_forms_tags %}
{% block content %} 
<div class="container">
<div class="row">
<div class="col-sm-9 col-md-7 col-lg-5 mx-auto">
<form method="POST" class="form-signin">
            {% csrf_token %}
            <div class="form-label-group">
            {{ form|crispy}}
            </div>
            
            <button class="btn btn-lg btn-primary btn-block text-uppercase" type="submit">Search</button> 
            </form>
            </div>
            {% if results.Accepter == request.user %}
            <article class="media content-section">
            <img class="rounded-circle article-img" src="{{ results.Added.profile.image.url }}">
            <a class="mr-2" href="{% url 'search-friend-detail' results.Accepter.username results.Added.username %}">{{ results.Added.username }}</a>
            <div class="media-body">
            <div class="article-metadata">
            {% else %}
            <article class="media content-section">
            <img class="rounded-circle article-img" src="{{ results.Accepter.profile.image.url }}">
            <a class="mr-2" href="{% url 'search-friend-detail' results.Accepter.username results.Added.username %}">{{ results.Accepter.username }}</a>
            <div class="media-body">
            <div class="article-metadata">
            {% endif %}
              </div>
              </div>
            </div>
            </div>
            </div>
            </div>
{% endblock content %}

我的意见.py:

def SearchChat(request):
    result=None
    if request.method == 'POST':
        form= ChatFriend(request.POST)
        
        if form.is_valid():
            name = form.cleaned_data.get('chatsearch')
            userr = User.objects.get(username=name)
            if FriendList.objects.filter(Accepter=request.user,Added=userr).exists():
                result = FriendList.objects.get(Accepter=request.user,Added=userr)
            else:
                result = FriendList.objects.get(Accepter=userr,Added=request.user)
    else:
        form= ChatFriend()
    context={
           'results': result,
           'form':form,
            }
    return render(request, 'chat/chatt.html', context)

def SearchChatDetail(request, username, usernamee):
    Acceptor= User.objects.get(username=username)
    Addid= User.objects.get(username=username)
    friend= FriendList.objects.get(Accepter=Acceptor,Added=Addid)
    msgs= Chat.objects.filter(messengers=friend)
    if request.method == 'POST':
        form= message(request.POST, instance=request.user)
        if form.is_valid():
            form.save()
            redirect('search-friend-detail',friend.Accepter.username,friend.Added.username)
    else:
        form= message(instance=request.user)
            
    context={
        'friend':friend,
        'msgs':msgs,
        'form':form,
        }
    return render(request, 'chat/search-friend-detail.html', context)

编辑:我忘了提到我第一次运行它工作的代码时,只是睡了几个小时才能回到下一个任务然后开始产生错误而根本不接触代码。

【问题讨论】:

  • 因为results 没有在 GET 响应中初始化。因此results.Accepter.usernameresults.Added.username 都是none,并且 url 反转机制无法构建该 url。
  • 尝试在他的 GET 响应中初始化结果,但由于我肯定必须传递上下文或导致任何 if 语句,我得到一个未绑定值错误,因为变量在初始化之前传递
  • 您的chatt.html 模板显然试图在搜索表单仍为空白时,在您获得任何搜索结果之前显示搜索结果详细信息的链接。如果您编辑您的帖子以显示您的 chatt.html 模板会有所帮助。
  • none 似乎没有构建 URL 所需的 Accepter.username

标签: python django django-templates django-urls


【解决方案1】:

在正确阅读 evergreen 的回复后解决了问题,我很糟糕,我正在将此视图与我编写的另一个有效工作的视图进行比较,但只记得我使用 ajax 请求来执行视图代码而不是加载新模板在这个问题中已经完成,我所做的只是添加一个条件语句以在搜索表单为空时仅显示搜索表单。 回答了这个问题,因为我知道以后还有其他人会遇到这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-07
    • 2014-01-18
    • 2021-08-24
    相关资源
    最近更新 更多