Django 使用 url 搜索用户

Django searching for user with url

我对 Django 有疑问。我尝试通过获取输入值并将此值附加到我的 url 来搜索用户,这样人们基本上也可以通过在 url 中键入名称来进行搜索(就像通过 Instagram 一样)。例如:“localhost/name”,它向我提供了用户的所有信息。尽管该值在 url 中并且我有一个动态 url 函数,但它不起作用。我在这里阅读了很多问题,但 none 对我有用。提前致谢。

urls.py

path("<str:name>/", views.search, name="search"),

views.py

@login_required(login_url="login")
def search(response, name=None):


if response.method == "POST":
    searched = response.POST['searchinput']
    users = User.objects.filter(username=name)
    return render(response, "main/search.html", {"searched":searched, "user":users})

else:
    return redirect("home")

base.html(用于输入)

              <form id="searchform" class="form-inline my-2 my-lg-0" name="searchinputform" method="POST" action=" {% url 'search' name=None %}">
              {% csrf_token %}
              <input class="form-control mr-sm-2" type="search" name="searchinput" id="searchinput" placeholder="Suche" >

<script>
$( "#searchform" ).submit( function( e ) {
    e.preventDefault();

    document.location = $( "#searchinput" ).val();

  } );
</script>

这个代码

    users = User.objects.filter(username=name)

不会给你一个用户,而是一个用户列表。如果您只需要一个通过用户名匹配的用户,请将其更改为

    user = User.objects.get(username=name.strip())

    user = User.objects.filter(username=name).first()

我想你想要这样的东西

# urls.py
path("<str:name>/", views.search, name="search")

# views
@login_required(login_url="login")
def search(request, *args, **kwargs):
    name = kwargs.get("name")
    users = User.objects.filter(username=username)
    if users.exists():
        return render(request, "main/search.html", {"searched":searched, "users":users})
    else:
        return redirect("home")

或者如果您想要 单人 用户

# used username instated of name so it be more clear,
# and because names are not unique but usernames are.
path("<str:username>/", views.search, name="search")

# views
@login_required(login_url="login")
def search(request, *args, **kwargs):
    username = kwargs.get("username")
    user = User.objects.filter(username=username)
    if user.exists():
        return render(request, "main/search.html", {"searched":searched, "user":user.first()})
    else:
        return redirect("home")