Câu hỏi django 1.5 - Cách sử dụng các biến bên trong thẻ tĩnh


Tôi hiện đang di chuyển tất cả các tham chiếu tệp tĩnh trong dự án của tôi sang thẻ {% static%} mới mà django 1.5 đã giới thiệu, nhưng tôi đang gặp sự cố, ở một số nơi tôi sử dụng các biến để lấy nội dung. Với thẻ mới tôi không thể, có cách nào để giải quyết vấn đề này không?

Mã hiện tại:

<img src="{{ STATIC_URL }}/assets/flags/{{ request.LANGUAGE_CODE }}.gif" alt="{% trans 'Language' %}" title="{% trans 'Language' %}" />

Những gì nó nên được (điều này không làm việc):

<img src="{% static 'assets/flags/{{ request.LANGUAGE_CODE }}.gif' %}" alt="{% trans 'Language' %}" title="{% trans 'Language' %}" />

76
2018-05-20 18:24


gốc




Các câu trả lời:


Bạn có thể ghép các chuỗi bằng add bộ lọc mẫu:

{% with 'assets/flags/'|add:request.LANGUAGE_CODE|add:'.gif' as image_static %}
  {% static image_static %}
{% endwith %}

Những gì bạn đang cố gắng làm không hoạt động với static thẻ mẫu bởi vì nó chỉ lấy một chuỗi hoặc một biến:

{% static "myapp/css/base.css" %}
{% static variable_with_path %}
{% static "myapp/css/base.css" as admin_base_css %}
{% static variable_with_path as varname %}

114
2018-05-20 18:45



Tôi vừa thử nghiệm nó, nó cũng không hoạt động. Có vẻ như tôi sẽ phải nghĩ cách giải quyết vấn đề này - Oscar Carballal
Bạn có thể cụ thể hơn là "nó không hoạt động" không? Chỉ cần thử nghiệm nó và kết quả đầu ra /static/assets/flags/de.gif mà không có bất kỳ vấn đề... - Bernhard Vallant
Lỗi của tôi! Tôi không có thẻ tĩnh được tải, giải pháp này hoạt động hoàn hảo :) - Oscar Carballal
@daveoncode Yêu cầu sẽ có sẵn trong ngữ cảnh mẫu nếu bạn có django.core.context_processors.request được thêm vào TEMPLATE_CONTEXT_PROCESSORS trong của bạn settings.py. - Bernhard Vallant
Một vấn đề tương tự, điều này không hoạt động: {{mus.bio | add: LANGUAGE_CODE | cut: "\ n"}} Tôi muốn sử dụng ngôn ngữ. mã trong một mẫu var. Bất kỳ giúp đỡ? - Timo


một cách rõ ràng hơn là đặt {% static%} làm biến từ đầu html để chúng tôi có thể sử dụng nó theo bất kỳ cách nào chúng tôi muốn.

{% load static %}
{% static "" as baseUrl %}
<img src="{{ baseUrl }}/img/{{p.id}}"></img>

18
2018-03-03 03:37



Điều này không thành công nếu bạn đang sử dụng lưu trữ s3 với các URL đã ký, dưới dạng phần phụ Lưu trữ nếu không được gọi để chuẩn bị URL cho mỗi tệp. - shuckc
Điều này trông rất đẹp trong một mẫu nhưng điều này là một hack hơn là một cách sạch sẽ của việc sử dụng tĩnh. - Mikuz


Tôi đã nhận này để làm việc bằng cách sử dụng một chuỗi rỗng cho đường dẫn tĩnh và sau đó sử dụng các biến của tôi trong phần riêng của họ, như thế này:

<a href= "{% static "" %}{{obj.a}}/{{obj.b}}/{{obj.c}}.gz" >Name</a>

11
2018-03-13 07:47



điều này là siêu thông minh, nhưng những gì @horbor nói, bạn có thể đơn giản hóa nó hơn nữa! docs.djangoproject.com/en/1.6/ref/templates/builtins/… - daviddeath


@rounin, ít nhất bạn có thể sử dụng

{% get_static_prefix %} 

sẽ được tải khi bạn {% tải tĩnh%}. Nó chỉ tự nhiên hơn {% tĩnh ''%} :)


10
2018-05-18 18:21



Điều này sẽ không hoạt động với những thứ như ManifestStaticfilesStorage thay đổi foo.js vào foo.8c9a23d.js - Kos


Đối với những gì nó có giá trị, tôi nghĩ rằng đây là cách dễ nhất:

<img src="{% static 'assets/flags/'|add:request.LANGUAGE_CODE|add:'.gif' %}" ... >

Đây là câu hỏi cũ và tôi không chắc chắn nếu phương pháp này có thể được thực hiện trở lại sau đó, Nhưng bây giờ, trong Django 2.0 này dường như làm việc tốt cho tôi.


2
2018-03-28 04:45