Django a resources pre view

28 views
Skip to first unread message

Karol Bujaček

unread,
Mar 9, 2018, 3:50:48 AM3/9/18
to djan...@googlegroups.com
Ahoj,

Nejakú dobu premýšľam nad možnosťou, ako jednoducho spravovať rôzne
statické zdroje a priradiť ich k view. Nič iné, než (opakovane) písať
<script .....> tagy do rôznych template a/alebo použiť Form Assets
(Media class) sa mi nájsť nepodarilo. Prvá možnosť mi pripadá zbytočne
pracná, druhá možnosť sa mi páči viac, ale vyžaduje form (a ten na
stránke nie vždy mám).

Pred tým, než som sa dostal k pythonu a djangu som pracoval s Atlassian
Jira a tam bola taká celkom šikovná vec, keď všetky resources mohli byť
v XML konfiguračnom súbore uvedené v podobnom tvare:

    <web-resource key="scriptaculous" name="Scriptaculous" >
        <resource type="download" name="scriptaculous.js"
location="includes/js/effects/scriptaculous.js" />
        <resource type="download" name="effects.js"
location="includes/js/effects/effects.js" />
    </web-resource>

a v metóde, ktorá je ekvivalentná view v django, som ich mohol natiahnuť
jednoducho takto:

pageBuilderService.assembler().resources().requireWebResource("example.plugin.helloworld:scriptaculous");

Respektíve ak som použil zápis

<web-resource name="Resources" key="resources">
       <resource name="foo.js" type="download"
location="resources/foo.js"/>
       <context>atl.general</context>
</web-resource>

(s <context> tagom), tak som mohol použiť len niečo ako

$webResourceManager.requireResourcesForContext("com.acme.plugin.fancy-context")

(viď <https://developer.atlassian.com/server/jira/platform/web-resource/>)


Moja otázka je, existuje v django niečo podobné? Alebo existuje nejaký
úplne iný prístup, ako mať poriadok v resources? (Teda, ono to až tak
„problémom“ nie je, skôr je to veľmi nepohodlné a zvádza to k tomu, aby
každá stránka mala všetky resources, aj keď ich vôbec nevyužije. A to už
by som za problém považoval).


Vopred vďaka za tipy a rady.


Karol


Jirka Vejrazka

unread,
Mar 9, 2018, 4:15:18 AM3/9/18
to django-cs
Ja nevim, mozna na to existuje i nejake "standardizovane" reseni. Ale jestli jde primarne o to, definovat staticke zdroje uz ve view (osobne mi to pripada nelogicke a principialne spatne, ale to je jiny problem), tak it prece nic nebrani udelat nejake "resources.py", coz bude jednoduchy python dict definujici obdobu tveho XML souboru z Atlassianu:

static_resources = {
  "scriptaculous.js": "includes/js/effects/scriptaculous.js",
  "effects.js": "includes/js/effects/effects.js",
 ...
}

 No a pak uz potrebujes jen tohle:

  * v kazdem view si do kontextu pridas neco jako required_resources = ["scriptalous.js", "effects.js"]
  * nekde v nejakem base.html (nebo podobnem zakladu tveho template systemu) bude neco jako:
   {% for resource_name in required_resources %}
      {% static_resource resource_name %}
   {% endfor %}

  * no a template tag "static_resource" ti vrati odpovidajici "<script " nebo "<style " podle toho, jaky typ souboru a jaka cesta je v resources.py.

  Nebo jsem to pochopil cele spatne?

   Jirka




--
--
E-mailová skupina djan...@googlegroups.com
Správa: http://groups.google.cz/group/django-cs
--- Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e-maily ze skupiny, zašlete e-mail na adresu django-cs+unsubscribe@googlegroups.com.
Chcete-li zobrazit tuto diskusi na webu, navštivte https://groups.google.com/d/msgid/django-cs/f4add36e-3c95-6347-b2e0-fdf262d44b3d%40fossilgroup.net.
Další možnosti najdete na adrese https://groups.google.com/d/optout.

Karol Bujaček

unread,
Mar 9, 2018, 9:04:17 AM3/9/18
to djan...@googlegroups.com



On 03/09/2018 10:14 AM, Jirka Vejrazka wrote:
Ja nevim, mozna na to existuje i nejake "standardizovane" reseni. Ale jestli jde primarne o to, definovat staticke zdroje uz ve view (osobne mi to pripada nelogicke a principialne spatne, ale to je jiny problem), tak it prece nic nebrani udelat nejake "resources.py", coz bude jednoduchy python dict definujici obdobu tveho XML souboru z Atlassianu:

static_resources = {
  "scriptaculous.js": "includes/js/effects/scriptaculous.js",
  "effects.js": "includes/js/effects/effects.js",
 ...
}

 No a pak uz potrebujes jen tohle:

  * v kazdem view si do kontextu pridas neco jako required_resources = ["scriptalous.js", "effects.js"]
  * nekde v nejakem base.html (nebo podobnem zakladu tveho template systemu) bude neco jako:
   {% for resource_name in required_resources %}
      {% static_resource resource_name %}
   {% endfor %}

  * no a template tag "static_resource" ti vrati odpovidajici "<script " nebo "<style " podle toho, jaky typ souboru a jaka cesta je v resources.py.

  Nebo jsem to pochopil cele spatne?

   Jirka



Ahoj,

Vďaka za reakciu. Myslím, že si to pochopil dobre, vyskúšam, či mi taký prístup nespôsobí ešte viac komplikácií.

Problém môjho nepochopenia je možno aj v tom, že sa snažím použiť prístup z minulosti na problému v úplne inom svete, nevhodným spôsobom a vhodný nepoznám.

Ak by som sa ale mohol chytiť vety „osobne mi to pripada nelogicke a principialne spatne, ale to je jiny problem“, chceš tým povedať, že to, aké externé súbory sa do stránky natiahnu, by mali byť riešené až/priamo v template a view by mal iba poskytnúť nejaké dáta, ktoré budú pomocou template zobrazené ?(Alebo vôbec nebudú, lebo o tom rozhoduje template.)

Myšlienka s template tagom ma ale zaujala a možno to je rovnocenné s tým, čo by som chcel. Ak v template použijem niečo ako

{% require_static "blabla.js" %}

tak to je oveľa jednoduchšie než písať <script> či iné tagy. Teoreticky pri vhodnom zadefinovaní resources (ako píšeš v časti pri  static_resources = { .... } ) by som mohol vedieť nastaviť aj prípadné jednoduché závislosti.


Vďaka za nakopnutie, odpoveď pomohla.



Karol

Václav Řehák

unread,
Mar 9, 2018, 10:23:54 AM3/9/18
to djan...@googlegroups.com
Ak by som sa ale mohol chytiť vety „osobne mi to pripada nelogicke a principialne spatne, ale to je jiny problem“, chceš tým povedať, že to, aké externé súbory sa do stránky natiahnu, by mali byť riešené až/priamo v template a view by mal iba poskytnúť nejaké dáta, ktoré budú pomocou template zobrazené ?(Alebo vôbec nebudú, lebo o tom rozhoduje template.)

Tady bych souhlasil s Jirkou. View má obsahovat byznys logiku (pro daný request vrať nějaká data) a template reprezentaci. Pokud bys např. dělal mobilní verzi stránky nikoliv responzivně (jak je současný trend) ale jako seperátní template, budeš mít dost problém, když stastické soubory budou definované view. 

 

Myšlienka s template tagom ma ale zaujala a možno to je rovnocenné s tým, čo by som chcel. Ak v template použijem niečo ako

{% require_static "blabla.js" %}

tak to je oveľa jednoduchšie než písať <script> či iné tagy.

Na to můžeš použít jednoduchý templatetag podobný jako zde: https://gist.github.com/xros/4ca259a3c15e6ae742daf72c668d1583

(jen bacha ten toJSON, tomu bych se vyhnul [1])

Vašek

Reply all
Reply to author
Forward
0 new messages