如何在Django中将搜索结果的文本URL转为可点击链接?
Django搜索结果URL转为可点击链接
我正在Django中开发一个搜索栏,用于搜索页面并展示页面名称与URL。目前搜索结果中的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 %}
views.py 中的search_page方法
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 中的Pages类
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
已尝试的方法
我曾使用如下语法转换URL:
{% for page in pages %} {{ page }} - {{% url 'page.web'%}}<br/>
但触发了TemplateSyntaxError错误。
解决方案
你不需要使用Django的{% url %}标签,因为page.web是已经存储的完整URL(对应模型里的URLField),直接用HTML的<a>标签即可实现可点击链接:
修改模板中的循环部分为:
{% for page in pages %} {{ page }} - <a href="{{ page.web }}">{{ page.web }}</a><br/> {% endfor %}
如果希望链接显示自定义文本(比如只显示页面名称而不是完整URL),可以改成:
{% for page in pages %} <a href="{{ page.web }}">{{ page }}</a><br/> {% endfor %}
解释:{% url %}标签的作用是根据Django项目内部的视图名称生成URL,而这里的page.web是外部或已经存在的完整URL,直接绑定到<a>标签的href属性即可。
内容的提问来源于stack exchange,提问作者fleezi
相关产品推荐
相关产品推荐

