ส่วนที่สำคัญที่สุดของคำถามอยู่ในหัวข้อ
ฉันสงสัยว่าแท็กใดดีที่สุดสำหรับกรณีใด ยิ่งไปกว่านั้น ... ฉันพบโค้ดที่ใช้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