How to get object from PK inside Django template?

前端 未结 5 1689
逝去的感伤
逝去的感伤 2021-02-07 10:38

Inside django template, I would like to get object\'s name using object\'s pk. For instance, given that I have pk of object from class A, I would like to do somethi

相关标签:
5条回答
  • 2021-02-07 10:42

    You can't do that in Django. From the docs:

    Because Django intentionally limits the amount of logic processing available in the template language, it is not possible to pass arguments to method calls accessed from within templates. Data should be calculated in views, then passed to templates for display.

    0 讨论(0)
  • 2021-02-07 10:54

    From the docs on The Django Template Language:

    Accessing method calls:

    Because Django intentionally limits the amount of logic processing available in the template language, it is not possible to pass arguments to method calls accessed from within templates. Data should be calculated in views, then passed to templates for display.

    So you see, you should be calculating this in your views.py:

    def my_view(request, A_pk):
        ...     
        a = A.objects.get(pk=A_pk)    
        ...
        return render_to_response('myapp/mytemplate.html', {'a': a})
    

    And in your template:

    {{ a.name }}
    {{ a.some_field }}
    {{ a.some_other_field }}
    
    0 讨论(0)
  • 2021-02-07 10:59

    It's unclear exactly what you're trying to accomplish but you should figure out how you can achieve your desired outcome in the view and send the variable or object to the template.

    0 讨论(0)
  • 2021-02-07 11:02
    1. create folder named 'templatetags' inside the module.

    2. create 'anyname.py' inside the templatetags

    anyname.py

    from django import template
    from Clients.models import Client
    register = template.Library()
    @register.filter
    def get_client_name(pk, attr):
        obj = getattr(Client.objects.get(id=pk),attr)
        return obj
    

    now in the template add

    {% load get_client_name from anyname %}
    {{project.Client_id|get_client_name:'Name_of_client' }}
    

    also you can check django documentation on custom tags

    0 讨论(0)
  • 2021-02-07 11:05

    You can add your own tag if you want to. Like this:

    from django import template
    register = template.Library()
    
    @register.simple_tag
    def get_obj(pk, attr):
        obj = getattr(A.objects.get(pk=int(pk)), attr)
        return obj
    

    Then load tag in your template

    {% load get_obj from your_module %}
    

    and use it

    {% get_obj "A_pk" "name" %}
    
    0 讨论(0)
提交回复
热议问题