ส่วนที่สำคัญที่สุดของคำถามอยู่ในหัวข้อ
ฉันสงสัยว่าแท็กใดดีที่สุดสำหรับกรณีใด ยิ่งไปกว่านั้น ... ฉันพบโค้ดที่ใช้settings.STATIC_URL
รวมอยู่{{STATIC_URL}}
ในเทมเพลตด้วย
ฉันสับสนเล็กน้อย
ส่วนที่สำคัญที่สุดของคำถามอยู่ในหัวข้อ
ฉันสงสัยว่าแท็กใดดีที่สุดสำหรับกรณีใด ยิ่งไปกว่านั้น ... ฉันพบโค้ดที่ใช้settings.STATIC_URL
รวมอยู่{{STATIC_URL}}
ในเทมเพลตด้วย
ฉันสับสนเล็กน้อย
คำตอบ:
static
แท็กเทมเพลตในตัว "ลิงก์ [s] ไปยังไฟล์แบบคงที่ที่บันทึกไว้ในSTATIC_ROOT
"
staticfiles
แอป contrib ของstatic
แท็กแม่แบบ "ใช้กำหนดค่าSTATICFILES_STORAGE
การจัดเก็บข้อมูลเพื่อสร้าง URL แบบเต็มสำหรับให้ทางญาติ" ซึ่งก็คือ "มีประโยชน์โดยเฉพาะอย่างยิ่งเมื่อใช้แบ็กเอนด์การจัดเก็บไม่อยู่ในท้องถิ่นในการปรับใช้ไฟล์"
ในตัวstatic
เอกสารแท็กเทมเพลต (เชื่อมโยงไปยังด้านบน) มีบันทึกที่บอกว่าจะใช้เป็นstaticfiles
แอพพลิเค contrib ของstatic
แท็กแม่ "ถ้าคุณมีกรณีการใช้งานขั้นสูงเช่นการใช้บริการคลาวด์ที่จะให้บริการไฟล์คงที่" และมันทำให้ตัวอย่างนี้ ทำเช่นนั้น:
{% load static from staticfiles %}
<img src="{% static "images/hi.jpg" %}" alt="Hi!" />
คุณสามารถใช้ได้{% load staticfiles %}
มากกว่า{% load static from staticfiles %}
ถ้าต้องการ แต่อย่างหลังชัดเจนกว่า
{% load static %}
. "ในเวอร์ชันเก่าคุณต้องใช้{% load static from staticfiles %}
ในเทมเพลตของคุณเพื่อให้บริการไฟล์จากที่เก็บข้อมูลที่กำหนดไว้ใน STATICFILES_STORAGE ซึ่งไม่จำเป็นอีกต่อไป"
{% load static %}
เท่านั้น
ฉันไม่รู้ว่าควรจะแตกต่างกันอย่างไร แต่ฉันพบความแตกต่างของกรณีการใช้งาน (โดยใช้ django 1.9.1 ที่ทำงานผ่าน apache, wsgi บน Python 3.4) ในแอพของฉันฉันมีรูปภาพบางส่วนอยู่ImageFields
ในฐานข้อมูล หากฉันใช้รหัสเช่นนี้ในเทมเพลตของฉัน:
<a href="object-{{object.id}}"><img src="{% static object.image %}" height="200px"></a>
จากนั้นถ้าฉันใช้{% load static %}
django จะพ่นTypeError
( Cannot mix str and non-str arguments
) น่าจะเป็นเพราะobject.image
ไม่ใช่สตริง แต่เป็นสตริงImageField
ที่ถูกแปลงเป็นสตริงในขั้นตอนต่อไป อย่างไรก็ตามหากใครใช้ก็{% load staticfiles %}
ไม่มีข้อผิดพลาดเกิดขึ้น
น่าเสียดายที่ฉันค้นพบความแตกต่างนี้หลังจากใช้เวลาหลายชั่วโมงในการพยายามแก้ไขปัญหา ฉันจัดการเพื่อหาวิธีแก้ปัญหาเมื่อใช้ตัวเลือกแรกคือการเพิ่มวิธีการแปลงสตริงให้กับวัตถุเช่นนี้:
#image string
def image_str(self):
return str(self.image)
หวังว่าความรู้นี้จะมีประโยชน์กับใครบางคน
เอกสาร Django {% load static %}
ชอบตอนนี้
{% load staticfiles %}
ใช้งานได้ แต่ฉันคิดว่าเลิกใช้แล้ว
https://docs.djangoproject.com/en/dev/ref/templates/builtins/#static
อ้างถึงเอกสารซึ่งมีคำอธิบายที่ดี ที่จริงแล้ว{% static %}
แท็กเทมเพลตรู้ตำแหน่งของSTATICFILE_STORAGE
ตามที่เอกสารกล่าวว่า:
{% load static from staticfiles %} <img src="{% static "images/hi.jpg" %}" alt="Hi!" /> The previous example is equal to calling the url method of an instance of STATICFILES_STORAGE with "images/hi.jpg".
สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อใช้แบ็กเอนด์ที่เก็บข้อมูลที่ไม่ใช่ในเครื่องเพื่อปรับใช้ไฟล์ตามที่ระบุไว้ในการให้บริการไฟล์แบบคงที่จากบริการคลาวด์หรือ CDN
หากคุณต้องการดึง URL แบบคงที่โดยไม่ต้องแสดงคุณสามารถใช้การเรียกที่แตกต่างกันเล็กน้อย:
{% load static from staticfiles %} {% static "images/hi.jpg" as myphoto %} <img src="{{ myphoto }}" alt="Hi!" />
หวังว่าจะช่วย !!
{% load static %}
, {% load staticfiles %}
, {{STATIC_URL}}
... และรู้ว่าผมไม่ทราบว่าสิ่งที่เป็นความแตกต่างระหว่าง{% load static %}
และ{% load static from staticfiles %}
{% load staticfiles %}
มีประโยชน์มากเมื่อคุณใช้พื้นที่เก็บข้อมูลต่างๆเช่น S3 จากนั้นจะแปลงเป็น S3 URL