6

tôi đã thực hiện bộ lọc tùy chỉnh này để kiểm tra xem một hình ảnh tồn tại hay không:Django - bộ lọc tùy chỉnh để kiểm tra nếu tập tin tồn tại

from django import template 
from django.core.files.storage import default_storage 

register = template.Library() 

@register.filter(name='file_exists') 
def file_exists(filepath): 
    if default_storage.exists(filepath): 
     return filepath 
    else: 
     index = filepath.rfind('/') 
     new_filepath = filepath[:index] + '/image.png' 
     return new_filepath 

Và tôi đã sử dụng này trong các mẫu như thế này:

<img src="{{ STATIC_URL }}images/{{ book.imageurl }}|file_exists" alt="{{book.title}} Cover Photo"> 

Nhưng nó không hoạt động. Và tôi không biết tại sao.

+0

gì bạn có nghĩa là nó "không hoạt động"? Nó quay trở lại cái gì? –

+0

Tôi nhận được 'http: // localhost: 8000/static/images/ios.png | file_exists' trong url của hình ảnh – Sourabh

Trả lời

5

Bạn không áp dụng bộ lọc vì |file_exists nằm ngoài số {{}}. Hãy thử điều này:

<img src="{{ STATIC_URL }}images/{{ book.imageurl|file_exists }}" alt="{{book.title}} Cover Photo"> 

Hoặc, nếu bạn muốn áp dụng file_exists đến url hình ảnh toàn bộ, hãy thử này:

<img src="{{ STATIC_URL|add:'images/'|add:book.imageurl|file_exists }}" alt="{{book.title}} Cover Photo"> 
+0

Tôi muốn bộ lọc có được hình ảnh' {{STATIC_URL}}/{{book.imageurl}} '. và không chỉ '{{book.imageurl}}'. Có thể không? – Sourabh

+0

@Sourabh Tôi đã cập nhật câu trả lời, vui lòng kiểm tra. – alecxe

+0

Tôi đã thử phương pháp đầu tiên của bạn và thay đổi bộ lọc thành '.exists ('appname/static/images /' + DataIReceived)' và '.exists ('static/images /' + DataIReceived)' nhưng trong cả hai trường hợp django không thể tìm thấy và tôi lấy lại 'image.png'. Đường dẫn tương đối nên là gì? – Sourabh

Các vấn đề liên quan