Django模板生成Twitter Web Intent URL:为何未自动缩短为t.co?
关于Twitter Web Intent自动生成t.co短链接的问题
首先明确说:你的观点完全正确!Twitter的Web Intent确实会自动把你传入的url参数转换成t.co短链接,根本不需要你手动去做缩短操作——只要参数传递正确,Twitter后端会自动处理这一步。
那你哪里操作错了呢?看你的模板代码,主要问题出在参数拼接和编码的方式上:
- 你把
page.get_site.root_url和page.url分开做urlencode后再拼接,这可能导致完整URL的编码逻辑出错。正确的做法应该是先把完整的网站URL(根URL+页面URL)合并成一个字符串,再对整个字符串做一次urlencode,而不是分开编码后拼接。 - 你手动用
%26来分隔参数,但在Django模板的HTML属性里,应该直接用&(Django会自动帮你转义成&,符合HTML规范),手动写%26反而可能让Twitter无法正确识别参数分隔,导致url参数没有被正常解析。
给你两个修正后的模板写法参考:
方法1:用Django的urlencode过滤器处理整个参数字典(更推荐)
这种方式更干净,不容易出错:
{% with full_share_url=page.get_site.root_url|add:page.url %} <a href="https://twitter.com/intent/tweet?{% urlencode text=block.value url=full_share_url via=pathtweets %}"> 分享到Twitter </a> {% endwith %}
方法2:手动拼接但修正编码和参数分隔
如果坚持手动拼接,要确保完整URL先合并再编码,用&分隔参数:
<a href="https://twitter.com/intent/tweet?text={{ block.value|urlencode }}&url={{ page.get_site.root_url|add:page.url|urlencode }}&via=pathtweets"> 分享到Twitter </a>
修正后你可以再检查渲染后的URL:确保url参数是一个完整的、编码正确的页面URL,这样Twitter就能正确识别并自动生成t.co短链接了。
内容的提问来源于stack exchange,提问作者mheavers
相关产品推荐
相关产品推荐

