После публикации новой статьи (в форме через Ajax) на моем новостном сайте Django я хочу вернуть ссылку на статью.
Для этого я использую объект Template, который гласит:
if form.is_valid():
form.instance.user = request.user
new_article = form.save()
success = Template('<div id="panel_input" class="col-lg-4"> <h2 class="text-center"> Success </h2> <p class="text-center"> Your Article has been posted. You can see and edit details by clicking <a href="{% url "article_manager:article" %}/{{ article_id }}">here</a>. </p></div>')
context = Context({"article_id" : new_article.pk})
return HttpResponse(success.render(context))
UrlsConf для этого выглядит так:
...
url(r'^article/(?P<article_id>\d+)/$', views.article, name='article'),
...
Проблема в том, что я получаю сообщение об ошибке из-за {% url "article_manager:article" %}/{{ article_id }}
. По-видимому, я должен передать article_id
внутри предыдущего тега, так как urlsConf
требует параметр id
.
Но я также получаю сообщение об ошибке, когда я помещаю второй тег в первый, например:
{% url "article_manager:article" {{ article_id }} %}
Я не уверен, как выполнить эту задачу, она, похоже, не работает с инструментами, которые у меня есть. У кого-нибудь есть предложения?
Попробуйте {% url "article_manager:article" article_id=article_id %}
Может быть, потребуется немного больше объяснений: вы вызывали тег шаблона справа {% url "namespace:name" %}
. Помните, что некоторые templatetags могут принимать аргументы в форме *args, **kwargs
. Аргументы могут быть любым простым выражением, понимаемым языком шаблона, включая контекстную переменную (нет необходимости добавлять двойные фигурные скобки). Квадраты следуют тому же правилу и имеют форму argument=expression
. Таким образом, вы можете вызвать теги шаблонов с формой {% tag "exp" 1 request number=5 username=user.name %}