Django-从模板中检索api url并传递给视图



我正在使用Cryptocompare.comapi加载来自加密货币世界的新闻。在模板中,我正在循环浏览它,并在主页上显示它。我想添加一个功能,如果你点击发送按钮,它会向你发送一封电子邮件,其中包含你刚刚点击的新闻链接。最好的方法是什么?我试过了,但我不知道如何将点击的元素与视图中的url链接起来。

def home(request):
# Grab Crypto News
api_request = requests.get('https://min-api.cryptocompare.com/data/v2/news/?lang=EN')
api = json.loads(api_request.content)
return render(request, 'crypto/crypto_home.html', {'api': api})
def SendLink(request):
if request.method == 'POST':
subject = 'Link to crypto news'
from_email = 'test@gmail.com' 
message = 'Hello {}, here is your link:'.format(request.user) 
to_email = [request.user.email]
send_mail(
subject,
message,
from_email,
to_email
)
return HttpResponseRedirect(reverse('crypto-home'))

模板:

{% for x in api.Data %}
<div class='col-sm'>
<div class="card">
<img class="card-img-top" src="{{ x.imageurl }}" alt="{{ x.source }}">
<div class="card-body">
<h5 class="card-title">{{x.title}}</h5>
<p class="card-text">{{ x.body|safe }}.</p>
<div class="btn-group btn-group-sm" role='group'>
<a href="{{x.url}}" target="_blank" class="btn btn-primary">Read More</a>
<form method="post" action="{% url 'send_link' %}">
{% csrf_token %}
<button id="{{x.id}}" target="_blank" class="btn btn-primary">Send to e-mail</button>
</form>
</div>
</div>
</div>
</div>
{% endfor %}    

我想将模板"x.url"中的链接添加到视图,以便能够将链接添加到消息变量。我还试图通过新闻ID将其链接,但我无法将其传递给视图。知道我该怎么做吗?感谢

您似乎需要在表单中添加一个隐藏字段,用于将要传递到视图的URL:

<input type="hidden" id="URL" name="URL" value="{{x.url}}">

一旦你的视图中有了这个变量,你就可以将它添加到你的电子邮件模板中。

最新更新