fix: использование абсолютных URL для вложений в заявлениях
- Добавлен templatetag absolute_url для преобразования относительных путей
- Обновлены все шаблоны заявлений: request_list_full, request_detail, request_process
- Теперь все ссылки на вложения используют {% absolute_url %} для полных URL
- Добавлен use_url=True для attachment_url в сериализаторе API
- Исправлена проблема с локальными URL вместо доменных
This commit is contained in:
parent
1b329936bb
commit
9e0e5fa01a
@ -74,7 +74,7 @@ class RequestReadSerializer(serializers.ModelSerializer):
|
||||
is_final = serializers.BooleanField(read_only=True)
|
||||
|
||||
# URL для вложенного файла (аналогично file_url в DocumentReadSerializer)
|
||||
attachment_url = serializers.FileField(source="attachment", read_only=True)
|
||||
attachment_url = serializers.FileField(source="attachment", read_only=True, use_url=True)
|
||||
|
||||
# Новые поля для получателей
|
||||
departments = serializers.PrimaryKeyRelatedField(
|
||||
|
||||
@ -4,6 +4,33 @@ from datetime import datetime
|
||||
register = template.Library()
|
||||
|
||||
|
||||
@register.simple_tag(takes_context=True)
|
||||
def absolute_url(context, relative_url):
|
||||
"""
|
||||
Преобразует относительный URL в абсолютный с доменом.
|
||||
|
||||
Args:
|
||||
context: контекст шаблона (автоматически передаётся)
|
||||
relative_url: относительный путь (например, /media/file.pdf)
|
||||
|
||||
Returns:
|
||||
Полный URL с доменом (например, https://domain.com/media/file.pdf)
|
||||
"""
|
||||
if not relative_url:
|
||||
return ""
|
||||
|
||||
# Если уже абсолютный URL - возвращаем как есть
|
||||
if relative_url.startswith(('http://', 'https://')):
|
||||
return relative_url
|
||||
|
||||
request = context.get('request')
|
||||
if request:
|
||||
return request.build_absolute_uri(relative_url)
|
||||
|
||||
# Fallback - возвращаем относительный URL
|
||||
return relative_url
|
||||
|
||||
|
||||
@register.filter
|
||||
def in_list(value, csv):
|
||||
items = [s.strip() for s in str(csv).split(",") if s.strip()]
|
||||
|
||||
@ -80,7 +80,7 @@
|
||||
|
||||
{% if request_obj.attachment %}
|
||||
<a class="btn btn-ghost d-inline-flex align-items-center gap-1"
|
||||
href="{{ request_obj.attachment.url }}" target="_blank" rel="noopener">
|
||||
href="{% absolute_url request_obj.attachment.url %}" target="_blank" rel="noopener">
|
||||
<i class="bi-paperclip"></i><span>Вложение</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
@ -204,7 +204,7 @@
|
||||
<span class="txt-close">Скрыть</span>
|
||||
</button>
|
||||
{% if obj.attachment %}
|
||||
<a href="{{ obj.attachment }}" class="btn btn-ghost btn-sm d-inline-flex align-items-center gap-1" target="_blank">
|
||||
<a href="{% absolute_url obj.attachment.url %}" class="btn btn-ghost btn-sm d-inline-flex align-items-center gap-1" target="_blank">
|
||||
<i class="bi-paperclip"></i><span>Вложение</span>
|
||||
</a>
|
||||
{% endif %}
|
||||
|
||||
@ -86,7 +86,7 @@
|
||||
{# Вложение сотрудника (если есть) #}
|
||||
{% if request_obj.attachment %}
|
||||
<a class="btn btn-ghost d-inline-flex align-items-center gap-1"
|
||||
href="{{ request_obj.attachment.url }}" target="_blank"
|
||||
href="{% absolute_url request_obj.attachment.url %}" target="_blank"
|
||||
rel="noopener noreferrer" download>
|
||||
<i class="bi-paperclip"></i><span>Вложение сотрудника</span>
|
||||
</a>
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user