在Django中,如何将搜索结果文本转换为可点击的URL?

axr492tv  于 2023-03-04  发布在  Go
关注(0)|答案(2)|浏览(253)

我尝试在Django中创建一个搜索栏,通过显示页面的名称和url来搜索页面。
现在,我只能显示一个网页的网址作为纯文本时,它被搜索。
我希望网址是一个可点击的链接,导致该网页。

**这是我的代码目前的样子:**搜索结果页面search_page.html:

{% extends 'contents/main.html' %}
{% block content %}
  <center>
  {% if searched %}
    <h1>You searched for {{searched}}</h1>
    <br/>
    {% for page in pages %}
      {{ page }} - {{page.web}}<br/> <!-- page displays name of page and page.web displays url as text -->
    {% endfor %}
    
  {% else %}
    <h1>You forgot to search for a page</h1>
  {% endif %}
  </center>
{% endblock content %}

在www.example.com网站中实现search_page. html的方法views.py:

def search_page(request):
  if request.method == 'POST':
    searched = request.POST['searched']
    pages = Pages.objects.filter(name__contains=searched)
    return render(request, 'contents/search_page.html', {'searched':searched, 'pages':pages })

页面models.py的www.example.com类:

class Pages(models.Model):
  name = models.CharField('Page Name', max_length=120)
  web = models.URLField('Page URL') <!-- this gets the url of the page -->

  def __str__(self):
    return self.name

"我所尝试的“
我试过将page.web转换为URL,但它给了我一个TemplateSyntaxError:<br/> {% for page in pages %} {{ page }} - {{% url 'page.web'%}}<br/>

6qqygrtg

6qqygrtg1#

如果page.web变量包含url(从www.example.com文件中指定的路径名称生成urls.py),则在html中,您需要指定如下内容,以使页面成为超链接

{% for page in pages %}
  <a href="{% url page.web %}"> {{ page }} </a><br/>
{% endfor %}

如果page.web中有absolute url,则可以按如下所示重写超链接。

<a href="{{ page.web }}"> {{ page }} </a><br/>
qij5mzcb

qij5mzcb2#

好的一些建议和修改,首先你的搜索表单

{% csrf_token %}
<form class="form-inline my-2 my-lg-0 search-form" action="{% url 'search_results' %}" method="get">
  
  <input class="form-control mr-sm-2" type="search" placeholder="Search" name = "q" aria-label="Search" id="search-input">

  <button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
  
</form>

注意:action = url可能与您的名称不同
那么第二个是您的视图,(您需要使用get方法,而不是POST)

def SearchResultsView(request):

    query = request.GET.get('q') # (You get the "q" variable from the "name" in the html above)

    if query:
        search_results = Pages.objects.filter(
            (name__icontains=query) 

    context = {
        "search_results": search_results,
    }

    return render(request, 'blog/search_results.html', context)

最后,在搜索结果页面中,只需使用href标记

{% for results in search_results %}

<a href="{{ results.web }}"></a><br/>

{% end for %}

相关问题