将 tinyurl 重定向到原始 url 时找不到服务器,地址栏中仅显示 slug

Server not found when redirect tinyurl to original url, only slug isshown in the address bar

我正在尝试为产品创建简短的 urls。短 url 已生成并成功呈现到模板。

收到短片URL后,我复制了它并在浏览器中搜索它,它说找不到服务器。 我想将那些短 urls 重定向到原始 urls

例如:我原来的 url 是 - 127.0.0.1:8000/affiliation/link/10002/, 它自己的短 url 是 - tinyurl.com/yze3sjse;当我复制短 url 并在浏览器上搜索时,浏览器中只显示 slug 部分,即 affiliation/link/10002/ 因此,它无法重定向到原创 url

这是我的功能:

Views.py

#Display individual product and render short links for all using pyshorteners
def link_view(request, uid):
    results = AffProduct.objects.get(uid=uid)
    slink = request.get_full_path()
    shortener = pyshorteners.Shortener()
    short_link = shortener.tinyurl.short(slink)
    return render(request, 'link.html', {"results": results, "short_link": short_link})

Urls.py

urlpatterns = [
    path('link/', views.link, name='link'),
    path('link/<int:uid>/', views.link_view, name='link_view')
]+static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

浏览器中的地址栏也显示:'affiliation/link/10004/',本地主机已丢失

你最后一句话说明了一切。

您正在尝试访问不存在的 affiliation/link/10004/

您忘记输入 DNS/IP(在您的情况下:localhost),例如:http://mywebsite.com/affiliation/link/10004/

对我来说,问题来自 request.get_full_path(),其中只有 return URL 内容,而不是完整地址。

下面的函数根据需要将 URL 转换为所需的短链接:

#Display individual product and render short links for all using pyshorteners
def link_view(request, user_id, uid):
    user_id = user_id
    results = AffProduct.objects.get(uid=uid)
    slink = "http://127.0.0.1:8000/" + request.get_full_path()
    shortener = pyshorteners.Shortener()
    short_link = shortener.tinyurl.short(slink)
    return render(request, 'link.html', {"results": results, "short_link": short_link, "user_id": user_id})