Django Python Показать функции в HTML - PullRequest
0 голосов
/ 21 марта 2019

models.py

from django.db import models

class SomeModel(models.Model):
    def show_something(self):
        return "Foo Bar"

views.py

    from django.shortcuts import render
    from django.http import HttpResponse
    from .models import SomeModel


def some_view(request):
    instances = SomeModel.objects.all()  # queryset
    single_instance = instances.first()  # single object

    context = {
       'object_list' : instances,   # queryset
       'object' : single_instance  # single object
    }

    return render(request, 'your_template.html', context)

шаблон

{% load static %}
    {% load staticfiles %}
    <!DOCTYPE html>
    <html>
    <head>
        <title>Page</title>

        <link rel="icon" type="image/png" href="{% static 'img/logo.ico' %}" />

        <link href="https://fonts.googleapis.com/css?family=Acme" rel="stylesheet">
        <link rel="stylesheet" type="text/css" href="{% static 'css/styles.css' %}">
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

        <script src="{% static "js/jquery-1.11.1.js" %}"></script>
        <script src="{% static "js/rango-jquery.js" %}"></script>

        <script type="text/javascript">
            document.oncontextmenu = function(){return false;}
        </script>
        <style>
            {% block style %}{% endblock style %}
        </style>
    </head>

    <body bgcolor="" oncontextmenu="return false" onselectstart="return false" ondragstart="return false">  
        <div id="bar"></div>    

        {% for item in object_list %}  // accessing method through queryset

         {{ item.show_something }}

    {% endfor %}


    {{ object.show_something }}
    {% block content %}{% endblock %}
    </body>
    </html>

urls.py

from django.conf import settings
from django.conf.urls.static import static
from django.contrib import admin
from django.urls import path
from page import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.some_view, name="index")
]

if settings.DEBUG:
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

Это код, который есть сейчас, но он ничего не показывает на экране, он говорит, что собирается вернуть «Foo Bar» на экране, но это не так, и я выполнил миграцию

Я не знаю, объясню ли я достаточно, я надеюсь, что вы можете помочь мне, обновил его, чтобы вы могли лучше видеть "Рудра"

И я хочу показать эту функцию на моей html-странице, как это выглядит

SPACE SPACE SPACE SPACE SPACE SPACE SPACE SPACE SPACE SPACE

Ответы [ 3 ]

0 голосов
/ 21 марта 2019

Допустим, у вас есть такая модель:

# models.py

from django.db import models


class SomeModel(models.Model):
    # some fields

    def show_something(self):
        return "Foo Bar"

Теперь, когда у вас есть объектный метод класса модели, вам нужно получить к нему доступ через экземпляр модели.И этот экземпляр / экземпляры должны быть отправлены в шаблон из поля зрения.Вот так (я буду отправлять в шаблон и экземпляр одной модели, и queryset ):

# views.py

from .models import SomeModel


def some_view(request):
    instances = SomeModel.objects.all()  # queryset
    single_instance = instances.first()  # single object

    context = {
       'object_list' : instances   # queryset
       'object' : single_instance  # single object
    }

    return render(request, 'your_template.html', context)

И, наконец, в шаблоне вы можете получить доступ к методу следующим образом:

// your_template.html

{% for item in object_list %}  // accessing method through queryset
     {{ item.show_something }}
{% endfor %}


{{ object.show_something }}  // accessing method form a single object
0 голосов
/ 21 марта 2019

Вы можете либо вызвать его из представлений, предложенных @Kshitij, либо создать собственный шаблонный фильтр для вызова метода. Вот документация для написания пользовательских шаблонных фильтров .

В вашем случае вы можете создать собственный шаблонный фильтр как:

@register.filter
def call_method(obj):
    return obj.show

Тогда в вашем шаблоне вы можете использовать фильтр как:

{{ obj|call_method }}

где obj - это объект для указанной модели, который определяет метод.

Убедитесь, что метод определен внутри модели. Использование шаблонных фильтров облегчает вызов даже методов, которые ожидают какого-либо аргумента.

В случае, если ваш метод принимает аргумент в виде:

class MyModel(models.Model):
    ...
    def some_function(self, var):
        return var

Тогда вы можете легко создать фильтр шаблона, используя:

@register.filter
def get_method(obj, v):
    return obj.some_function(v)

Тогда в вашем шаблоне:

{{ obj|get_method:'your parameter' }}
0 голосов
/ 21 марта 2019

Если ваш метод находится внутри класса модели, передайте экземпляр вашей модели в HttpResponse и используйте Ginga для вызова метода.

from django.template import Template, Context

context = Context({‘my_model’: model_instance})
template = Template(“The method show prints {{my_model.show()}}”)
template.render(context)

Если это метод, определенный вне модели,

from django.template import Template, Context
from models import show

template = Template(“The method show prints {{show()}}”)
template.render()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...