在 Django 视图中使用 URL?可能的?

Posted

技术标签:

【中文标题】在 Django 视图中使用 URL?可能的?【英文标题】:Using URL in Django Views? Possible? 【发布时间】:2014-12-16 19:35:27 【问题描述】:

我有content = '请给我你提到的 Python 书,@friend'

然后在我的 views.py 中:

new_content = re.sub(r'(@\w+)', r"<a href='#'>\g<0></a>>", content)

这会返回

new_content = 'Please get me the Python book you talked about, <a href='#'>@friend</a>'

我希望如果用户点击@friend,它应该重定向到这个url

url(r'^user/(?P<user_name>\w+)/$', views.profile, name='profile'),

我如何在我的 views.py 中将这个 url(profile) 包含在 &lt;a href='#'&gt;&lt;/a&gt; 中,就像我在像 &lt;a href="% url 'mysite:profile' user.username %"&gt;@user.username&lt;/a&gt; 这样的 Django 模板中所做的那样?

【问题讨论】:

【参考方案1】:

您已经将参数命名为user_name

# urls.py
url(r'^user/(?P<user_name>\w+)/$', views.profile, name='profile'),

# views.py
from django.views.generic.detail import DetailView

class UserDetailView(DetailView):
    """
    Takes keyword argument 'user_name'
    and looks for it in database:
    User.objects.get(username='dude')
    """
    model = User
    slug_field = 'username'
    context_object_name = 'user'
    slug_url_kwarg = 'user_name'
    template_name = 'user_detail.html'

# Pass your keyword argument
<a href="% url 'mysite:profile' user_name=user.username %">@ user.username </a>

【讨论】:

这应该是我问题的答案吗? "我希望如果用户点击@friend,它应该重定向到这个 url:" 您需要在视图中定义正确的 url 标签、slug_field 和 slug_urlkwarg。是的,是的。【参考方案2】:

你使用 reverse()

return HttpResponseRedirect(reverse('url_name'))

您可以查看此answer for reference. 还有documentation for the function.

您可能需要传递参数。你可以这样做:

reverse('profile', kwargs='user_name': 'auth')

你可以试试:

content = 'Please get me the Python book you talked about, @friend'
new_content = re.sub(r'(@\w+)', r"<a href='%s'>\g<0></a>>" % (reverse('profile', kwargs='user_name': 'friend_username')), content)

【讨论】:

你的意思是return HttpResponseRedirect(reverse('profile')) 这不起作用。它说NoReverseMatch: Reverse for 'profile' with arguments '()' and keyword arguments '' not found. 0 pattern(s) t ried: [] 这可能是因为您正在尝试解析一个带有 1 个参数的 url,而您没有发送它。检查我的编辑。 让我知道这是否可行或需要其他方法来解决 做到了。谢谢你。但它没有在我的页面中呈现 HTML 标记。我已经问了另一个问题。如果你能帮忙。我将不胜感激。

以上是关于在 Django 视图中使用 URL?可能的?的主要内容,如果未能解决你的问题,请参考以下文章

无法使用视图名称 (django-rest-framework) 解析超链接关系的 URL

Django视图

Django中的RESTful api在Django中使用inbult视图,无需创建2个url

Django框架入门之视图和URL模板

Django视图函数的使用

Django 视图与URL进阶