2014-10-21 3 views
0

У меня есть content = 'Пожалуйста, принеси мне книгу Python вы говорили о том, @friend'Использование URL в представлениях Django? Возможное?

Тогда это в моем 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'), 

Как включить этот адрес (profile) в <a href='#'></a> в моем views.py, как я сделал бы в шаблоне Django, как этот <a href="{% url 'mysite:profile' user.username %}">@{{user.username}}</a>?

ответ

3

используется реверс()

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) 
+0

Вы имеете в виду что-то вроде 'вернуть HttpResponseRedirect (реверс ('профиль')) '? – Yax

+0

Это не работает. В нем указано «NoReverseMatch: обратное для« профиля »с аргументами«() »и аргументами ключевого слова« {} »не найдено. 0 pattern t ried: [] ' – Yax

+0

Возможно, вы пытаетесь разрешить URL-адрес, который принимает 1 аргумент, и вы его не отправляете. Проверьте мое редактирование. – cdvv7788

0

Вы уже именованный аргумент это 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> 
+0

Должен ли это быть ответом на мой вопрос? – Yax

+0

«Я хочу, если пользователь нажмет на @friend, он должен перенаправить на этот URL-адрес:« Вам нужен правильный тег url, slug_field и slug_urlkwarg, определенный в представлениях. Так что да. – byashimov

Смежные вопросы