san san
san san

Reputation: 51

Django How to send data from view to template

model.py

class Peer(models.Model):
    router = models.ForeignKey(Router, on_delete=models.CASCADE)
    ipv4_address = models.CharField(max_length=250)
    remote_as = models.CharField(max_length=250)

I have a custom button in Django admin Change form

<input type="submit" value="Test Peer" name="_peer-test">

Then in admin.py

def response_change(self, request, obj):
    if "_peer-test" in request.POST:
       self.message_user(request, "Peer Tested")
       url = request.POST.get('obj', '/peeringmanager/export')
       remote_as = obj.remote_as
       url += "?remote_as={}".format(remote_as)
       return HttpResponseRedirect(url)

So I sent the data (remote_as) from the obj to another view

views.py

def export(request):
    remote_as = request.GET.get('remote_as','')
    selected_peer = Peer.objects.filter(remote_as__exact=remote_as)
    template= loader.get_template('delete-peer.html')

    content= {
        'selected_peer':selected_peer,
    }
    return HttpResponse(template.render(content,request))

Here I want to use remote_as object to get all object in the form related to that Remote_as and sent it to a html.

delete-peer.html

{% block content %}
    {% for peer in content %}
        <p>{{ peer.remote_as }}</p>
    {% endfor %}

{% endblock %}

But I don't get any Data in HTML. any Idea? of a better way? Right now it results in an empty html

Upvotes: 1

Views: 1758

Answers (1)

Sergey Pugach
Sergey Pugach

Reputation: 5669

The template doesn't know content var, you need to specify vars listed in content dictionary:

{
    'selected_peer': selected_peer,
}

Put selected_peet instead of content:

{% block content %}
    {% for peer in selected_peer %}
        <p>{{ peer.remote_as }}</p>
    {% endfor %}
{% endblock %}

Upvotes: 1

Related Questions