Wiem, że to naprawdę proste pytanie, ale nie mam pojęcia, jak to znaleźć w Google.
jak mogę to zrobić
print '<a href="%s">%s</a>' % (my_url)
Więc to my_url
jest używane dwukrotnie? Zakładam, że muszę „nazwać”, %s
a następnie użyć dyktowania w parametrach, ale nie jestem pewien prawidłowej składni?
tylko do Twojej wiadomości, wiem, że mogę użyć my_url
dwa razy w parametrach, ale nie o to chodzi :)
Odpowiedzi:
W Pythonie 2.6+ i Pythonie 3 możesz wybrać nowszą metodę formatowania ciągów.
co oszczędza ci powtarzania argumentu, lub
jeśli chcesz nazwane parametry.
który jest ściśle pozycyjny i zawiera tylko zastrzeżenie, że argumenty format () są zgodne z regułami Pythona, gdzie nienazwane argumenty muszą znajdować się na pierwszym miejscu, po których następują nazwane argumenty, po których następuje * args (sekwencja taka jak lista lub krotka), a następnie * kwargs (dykt z kluczem, jeśli wiesz, co jest dla Ciebie dobre). Punkty interpolacji są określane najpierw przez podstawienie nazwanych wartości na ich etykietach, a następnie pozycyjne z tego, co zostało. Więc możesz też to zrobić ...
Ale nie to ...
źródło
"literal {arg1}".format(arg1="arg!")
Nazwie Format współpracuje z Pythona 3.5, natomiast terserf"literal {arg1}"
to nowsze innowacje w Pythonie 3.6 lub nowsza AFAIK.źródło
'<a href="%(url)s">%(url)s</a>' % dict(url=my_url)
Rozwiązanie w Pythonie 3.6+
Python 3.6 wprowadza dosłowne formatowanie ciągów , dzięki czemu można formatować nazwane parametry bez powtarzania któregokolwiek z nazwanych parametrów poza ciągiem:
To oceni
my_url
, więc jeśli nie jest zdefiniowane, otrzymasz plikNameError
. W rzeczywistości zamiast tegomy_url
możesz napisać dowolne wyrażenie Pythona, o ile wylicza się na łańcuch (ze względu na:s
kod formatujący). Jeśli chcesz, aby wynik wyrażenia, który może nie być ciągiem, miał reprezentację w postaci ciągu, zamień:s
na!s
, tak jak w przypadku zwykłego formatowania ciągu znaków.Aby uzyskać szczegółowe informacje na temat dosłownego formatowania ciągów, zobacz PEP 498 , gdzie zostało to wprowadzone po raz pierwszy.
źródło
Będziesz uzależniony od składni.
Również programiści C # 6.0 i EcmaScript również znają tę składnię.
źródło
Do budowania stron HTML chcesz użyć mechanizmu tworzenia szablonów, a nie prostej interpolacji ciągów.
źródło
render()
metody? Nic nie mówi, że musisz przesyłać dane wyjściowe szablonuHttpResponse()
. Django jest zawstydzająco wszechstronny.Oprócz sposobu słownikowego przydatna może być znajomość następującego formatu:
print '<a href="%s">%s</a>' % (my_url, my_url)
Tutaj jest to odrobinę nadmiarowe, a sposób słownikowy jest z pewnością mniej podatny na błędy podczas modyfikowania kodu, ale nadal można używać krotek do wielu wstawień. Pierwszy
%s
jest podstawiony przez pierwszy element w krotce, drugi%s
jest podstawiony przez drugi element w krotce i tak dalej dla każdego elementu w krotce.źródło
my_url
jest w rzeczywistości wywołaniem funkcji, którego nie chcę, aby było oceniane dwukrotnie. Dwa razy nie jest tak źle, ale spokojnie mogłoby to być 20 razy :)(get_my_url(), )*20
wywołuje funkcję tylko raz i powiela ją 20 razy.