Generuję kilka PDF za pomocą raportów w Django. Podążyłem i eksperymentowałem z odpowiedzią daną to pytanie i zdałem sobie sprawę, że podwójne cytaty w nim Nie masz sensu:

response['Content-Disposition'] = 'inline; filename=constant_"%s_%s".pdf'\
% ('foo','bar')

Podaje nazwę pliku constant_-foo_bar-.pdf

response['Content-Disposition'] = 'inline; filename=constant_%s_%s.pdf' \
% ('foo','bar')

Podaje nazwę pliku constant_foo_bar.pdf

Dlaczego to? Czy to po prostu zrobić z saneczkami Silug-esque dla systemów plików?

5
nimasmi 7 sierpień 2012, 00:56

2 odpowiedzi

Python nie konwertuje podwójnych cytatów do myślników w nazwach plików:

>>> with open('constant_"%s_%s".pdf' % ('foo', 'bar'), 'w'): pass
    $ ls
    ...
    constant_"foo_bar".pdf
    ...

Prawdopodobnie to Django, który nie pozwoli Ci użyć zbyt dziwnych nazw.

W każdym razie polecam użycie tylko następujących znaków w nazwach plików, aby uniknąć problemów przenośnych:

  • Litery [A-Z] [A-Z]
  • cyfry [0-9]
  • Myfen (-), podkreśla (_), plus (+)

Uwaga: Wykluczałem białe znaki na liście, ponieważ istnieje wiele skryptów, które nie używają właściwego cytowania i przełamać z takimi nazwami plików.

Jeśli ograniczysz się do tego zestawu znaków, prawdopodobnie nie będziesz miał problemów z patentami. Oczywiście inni ludzie lub inne programy mogą nadal nie przestrzegać tej "wytycznej", więc nie powinieneś zakładać, że konwencja jest współdzielona ścieżkami, które otrzymujesz od użytkowników lub innych źródeł zewnętrznych.

0
Bakuriu 7 lipiec 2016, 11:45

Twoje użycie jest nieco niepoprawne. Chciałbyś cytaty na całej nazwie pliku, aby uwzględnić przestrzenie itp.

Zmiana:

response['Content-Disposition'] = 'inline; filename=constant_"%s_%s".pdf'\
% ('foo','bar')

Do:

response['Content-Disposition'] = 'inline; filename="constant_%s_%s.pdf"'\
% ('foo','bar')
-1
randomfigure 16 sierpień 2012, 19:15