Jinja: urlencode рд╕реНрд▓реИрд╢ рд╕реЗ рдирд╣реАрдВ рдмрдЪрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 20 рдирд╡ре░ 2015  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: pallets/jinja

рдпрд╣ #444 рдореЗрдВ рдЙрдард╛рдпрд╛ рдЧрдпрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдб рд╣рдореЗрд╢рд╛ рдкрд╛рдпрдерди 3.4.1 рдкрд░ b'/' рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрд▓реИрд╢ рдЕрднреА рднреА рдмрдЪ рдирд╣реАрдВ рдкрд╛рдП рд╣реИрдВред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрд┐рдЯрд▓реИрдм рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдорд╛рд░рд╛ред рдЧрд┐рдЯрд▓реИрдм рдПрдкреАрдЖрдИ рдХреЛ рд╕реНрд▓реИрд╢ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ: {{ myvar | urlencode | regex_replace('/','%2F') }}. рдореИрдВ рдЕрдкрдиреЗ рдкреНрд▓реЗрдмреБрдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ Ansible рдФрд░ Jinja2 рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдЖрдк рдореЗрдВ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдорд╛рд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рд╣реИред

рд╕рднреА 21 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдмрд╕ рдПрдХ рд╕рд┐рд░ рдКрдкрд░ @mitsuhiko
рдореБрдЭреЗ рдкрддрд╛ рдирд╣реАрдВ рдХреНрдпреЛрдВ, рд▓реЗрдХрд┐рди do_urlencode рдЕрднреА рднреА рд╕реНрд▓реИрд╢ рд╕реЗ рдирд╣реАрдВ рдмрдЪрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ unicode_urlencode рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

Python 3.4.3 (default, Oct 14 2015, 20:28:29)
[GCC 4.8.4] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import jinja2
>>> jinja2.utils.unicode_urlencode("http://url.by", for_qs=True)
'http%3A%2F%2Furl.by'
>>> jinja2.filters.do_urlencode("http://url.by")
'http%3A//url.by'
>>> jinja2.__version__
'2.9.dev'

рдХреНрдпреЛрдВрдХрд┐ urlencode рдлрд╝рд┐рд▓реНрдЯрд░ рд╕реНрд▓реИрд╢ рд╕реЗ рдмрдЪрддрд╛ рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдХреЛрдИ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреНрдпреЛрдВ рдХрд░рдирд╛ рд╣реИ? рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП: рдпрд╣ рдХреЗрд╡рд▓ рдкрд╛рд░рд┐рдд рдХреБрдВрдЬреА/рдореВрд▓реНрдп рдЬреЛрдбрд╝реЗ рдХреА рдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╕реНрд▓реИрд╢ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рддрд╛ рд╣реИред

рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдпреВрдЖрд░рдПрд▓ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред http://meyerweb.com/eric/tools/dencoder/ рдЬреИрд╕реЗ рдЙрдкрдХрд░рдг рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдореЗрд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реА рдХрдВрдкрдиреА рдХреЗ рдЕрдВрджрд░ рдХрдо рд╕реЗ рдХрдо рдПрдХ рдЯреВрд▓ рд╣реИ рдЬреЛ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмрдЪреА рд╣реБрдИ рд╕реНрд▓реИрд╢ рдХреЗ рд╕рд╛рде рдЬреАрдИрдЯреА рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рдЕрдВрджрд░ рдпреВрдЖрд░рдПрд▓ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рд╕рдордЭ рдирд╣реАрдВ рдЖрддрд╛ рдХреНрдпреЛрдВ unicode_urlencode рдмреБрд▓рд╛рдпрд╛ рдЕрдВрджрд░ do_urlencode рдХреЗ рд╕рд╛рде for_qs=True ред
рд╢рд╛рдпрдж рдореИрдВ рдХреБрдЫ рдЧрд▓рдд рд╕рдордЭ рд░рд╣рд╛ рд╣реВрдБред

рдкрде рдШрдЯрдХ рдореЗрдВ рд╕реНрд▓реИрд╢ рдЖрд░рдХреНрд╖рд┐рдд рд╡рд░реНрдг рд╣реИрдВ рдФрд░ рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рд╡реНрдпрд╡рд╣рд╛рд░ рд╕рдм рдХреБрдЫ рдПрдиреНрдХреЛрдб рдХрд░рдирд╛ рд╣реИ рд▓реЗрдХрд┐рди рдПрдиреНрдХреЛрдбреЗрдб рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдпреВрдЖрд░рдПрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддреЗ рд╕рдордп рд╡рд╣рд╛рдВ рд╕реНрд▓реЗрд╢ рдХрд░рдирд╛ рд╣реИред рд╡рд┐рдХрд▓реНрдк (рд╕реНрд▓реИрд╢ рдХреЛ %2f рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП) рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рднреА рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рд░реНрд╡рд░ рд╕реБрд░рдХреНрд╖рд╛ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг рдЙрди рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдПрдХрдореБрд╢реНрдд рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рджреЗрддреЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ рдЖрдорддреМрд░ рдкрд░ %2f рдФрд░ / рдореЗрдВ рдЕрдВрддрд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдкрде рдШрдЯрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡реЗ рдбрд┐рдХреЛрдбреЗрдб рдСрдХреНрдЯреЗрдЯ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред

рддреЛ рдПрдХрдорд╛рддреНрд░ рд╣рд┐рд╕реНрд╕рд╛ рдЬрд╣рд╛рдВ рдПрдХ рд╕реНрд▓реИрд╢ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рд╣реИ рдФрд░ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ urlencode рдХреЗ dict рдЖрдзрд╛рд░рд┐рдд рдПрдиреНрдХреЛрдбрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡рд╣рд╛рдБ рднреА рдПрдХ рд╕реНрд▓реИрд╢ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред

рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ urlencode рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕реНрд▓реИрд╢ рдХреЛ рдПрдиреНрдХреЛрдб рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд╕реНрдЯрдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдВ рд╣реИрдВ рддреЛ рдЖрдк рдЕрдкрдиреЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдкрдВрдЬреАрдХрд░рдг рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдареАрдХред рдзрдиреНрдпрд╡рд╛рдж рдЖрд░реНрдорд┐рдиред

рдирдорд╕реНрддреЗ, рдореБрдЭреЗ рдЕрд╕реНрд╡реАрдХрд╛рд░ рд╕реНрд▓реИрд╢ рдХреЗ рд╕рд╛рде рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ, рдпрд╣рд╛рдВ рдХреЛрдб рд╣реИ:

jinja2.Template("{{disk|reject('sameas', '/')|list }}").render(disks=["/", "/mnt/disk0", "/mnt/disk1"])
рдЖрдк"['/', '/mnt/disk0', '/mnt/disk1']"

рдореИрдВ рд░реВрдЯ рдбрд┐рд╕реНрдХ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП?

>>> import jinja2
>>> jinja2.Template("{{ disks|reject('sameas', '/')|list }}").render(disks=["/", "/mnt/disk0", "/mnt/disk1"])
u"['/mnt/disk0', '/mnt/disk1']"
>>> jinja2.__version__
Out[3]: '2.8'

рдореЗрд░реЗ рд▓рд┐рдпреЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИред

рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, @ThiefMaster , рдХреНрдпрд╛ рдПрдХ рдЕрдЬрдЧрд░ рдореБрджреНрджрд╛ рд╣реЛрдЧрд╛? рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдкрд╛рдпрдерди рдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреНрдпрд╛ рд╣реИред

    Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on win32
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import jinja2
    >>> jinja2.Template("{{ disks|reject('sameas', '/')|list }}").render(disks=["/", "/mnt/disk0", "/mnt/disk1"])
    u"['/', '/mnt/disk0', '/mnt/disk1']"
    >>> jinja2.__version__
    '2.8'

рдУрд╣.. sameas is sameas рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ (рдФрд░ рдЖрдк рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 'foo' is 'foo' рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ)ред рдЖрдк equalto рдЬреЛ == рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред

рд╣рд╛рдБ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдореИрдВ Jinja2 рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд╛рд░ рдирд╣реАрдВ рд╣реВрдБред рдзрдиреНрдпрд╡рд╛рдж, @ ThiefMaster

рддреЛ рдПрдХрдорд╛рддреНрд░ рд╣рд┐рд╕реНрд╕рд╛ рдЬрд╣рд╛рдВ рдПрдХ рд╕реНрд▓реИрд╢ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рдХреНрд╡реЗрд░реА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдореЗрдВ рд╣реИ рдФрд░ рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ urlencode рдореЗрдВ dict рдЖрдзрд╛рд░рд┐рдд рдПрдиреНрдХреЛрдбрд░ рдЗрд╕ рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡рд╣рд╛рдБ рднреА рдПрдХ рд╕реНрд▓реИрд╢ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕реЗ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рдзреНрдп рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реИред

рдирд╣реАрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рдореЗрдВ рднреА / рдПрдиреНрдХреЛрдб рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ JS рдореЗрдВ encodeURI __and__ encodeURIComponent рд╣реИ ред

рдпрд╣ рдХрд╛рдлреА рдЙрдЪрд┐рдд рд╣реИ рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ рдФрд░ рдЗрд╕рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдкреНрд░рдорд╛рдг-рдкрддреНрд░ рд╡реИрд╕реЗ рднреА рдмрд╣рд┐рд╖реНрдХреГрдд рд╣реИрдВред рдЪреВрдВрдХрд┐ рдЙрди рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЗ рднреАрддрд░ рдЙрддреНрдкрд╛рджрд┐рдд рд╣реЛрдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рдПрдХ рдХрд┐рдирд╛рд░реЗ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдирд╣реАрдВ рд╣реИред

Ansible рдЬрд┐рдиреНрдЬрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рд╕рд┐рд╕реНрдЯрдо рд╕реЗрдЯ рдХрд░рддреЗ рд╕рдордп рд╕реБрд░рдХреНрд╖рд╛ рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдмрд╣реБрдд рдЖрдо рд╣реИред рдореИрдВрдиреЗ рдЕрднреА рдПрдХ рдорд╛рдорд▓рд╛ рдорд╛рд░рд╛ рд╣реИ рдЬрд╣рд╛рдВ рдПрдХ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдкрд╛рд╕рд╡рд░реНрдб рдореЗрдВ рдПрдХ рд╕реНрд▓реИрд╢ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдбреЗрдЯрд╛рдмреЗрд╕ рдпреВрдЖрд░рдПрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП urlencode рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рдХрд┐ рдмрд╣реБрдд рджреБрд░реНрднрд╛рдЧреНрдпрдкреВрд░реНрдг рд╣реИред рдЬрдмрдХрд┐ рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рддреЛрдбрд╝рдирд╛ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВ рди рдПрдХ рджреВрд╕рд░рд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдкреЗрд╢ рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рд╕реНрд▓реИрд╢ рд╕реЗ рдмрдЪ рдЬрд╛рдП?

рдЕрдирд╕рд┐рдмрд▓ рдРрд╕рд╛ рдХрд░ рд╕рдХрддрд╛ рдерд╛ред рдЬрд┐рдВрдЬрд╛ рдореЗрдВ рд╣реА рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрджрд▓рд╛рд╡ рдХреА рдХреЛрдИ рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ - рдпрд╣ рдХрд╕реНрдЯрдо рдлрд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдмрд┐рд▓реНрдЯрд┐рди рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдПрдХреНрд╕реНрдЯреЗрдВрд╕рд┐рдмрд▓ рд╣реИред

@ThiefMaster рдХреНрдпрд╛ рдЬрд┐рдВрдЬрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддреЗ рд╕рдордп HTML рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдХреЛ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдорд╛рдорд▓реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реЙрд▓реНрдЯрд╕реНрдЯреИрдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ, Ansible рдХреЗ рд╕рдорд╛рди рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд╕рд╛рде, рдЯреЗрдореНрдкреНрд▓реЗрдЯрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрдЬрд╛ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕реА рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рд▓рд╛рднрд╛рдиреНрд╡рд┐рдд рд╣реЛрдЧрд╛ред

@danielkza рдХреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдлрд┐рд▓реНрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рд╕реЗ saltstack рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ?

@mitsuhiko рдЬрд┐рдВрдЬрд╛ рдореЗрдВ рдХреЛрдИ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝рд┐рд▓реНрдЯрд░ рдХреНрдпреЛрдВ рд╢рд╛рдорд┐рд▓ рд╣реИ? рдореИрдВ рдХреЗрд╡рд▓ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдПрдХрд╛рдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧреА рд╣реИрдВред рдореИрдВрдиреЗ рджреЛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ Ansible рдФрд░ Salt рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ URL рдореЗрдВ рд╕реНрд▓реИрд╢ рд╕реЗ рдмрдЪрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдпрд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдореВрд▓реНрдпрд╡рд╛рди рд╣реЛрдЧрд╛ред

safe рддрд░реНрдХ рдХреЛ urlencode рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ рдкрд╛рдпрдерди рдХреЗ urllib.url_quote рдореЗрдВ рд╣реИ, рддрд╛рдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕реНрд▓реИрд╢ рд╕рдВрд░рдХреНрд╖рд┐рдд рд╣реЛрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЬрд┐рд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗ?

рдЬрд┐рдВрдЬрд╛ рдХреБрдЫ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддрд╛ рд╣реИред urlencoded рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЛ рд╡рд╣рд╛рдВ рд▓рдЧрднрдЧ 95% рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред рдЖрдк рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдХреЗ рд╕рдВрдкреВрд░реНрдг рдХреНрд╡реЗрд░реАрд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗрдЯ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдкрд░ urlencode рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрде рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рд╣реИред

рд╣рдо utf-8 рдпрд╛ рдЙрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╣рд╛рдВ рд░реБрдХреЗрдЧрд╛ред рдПрдХ url рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рднрд╛рдЧ рд╣реЛрддреЗ рд╣реИрдВ, рд╡рд╣рд╛рдБ рдкрд░рд┐рддрд╛рд░рд┐рдХрд╛ рд╣реЛрддреА рд╣реИ рдФрд░ рдЙрди рд╕рднреА рдХреЗ рдЕрдкрдиреЗ-рдЕрдкрдиреЗ рдХрдВрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рд╣рдо рд╡рд╣рд╛рдВ рд╣реИрдВ, рддреЛ рдХреНрдпреЛрдВ рди рд╕рд┐рд░реНрдл рдиреЗрдЯрд▓реЛрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреБрдиреАрдХреЛрдб тАЛтАЛрдПрдиреНрдХреЛрдбрд░ рдкреНрд░рджрд╛рди рдХрд░реЗрдВ?

рдПрдкреАрдЖрдИ рдХреЙрд▓ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЧрд┐рдЯрд▓реИрдм рд░рд┐рдкреЛрдЬрд┐рдЯрд░реА рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореИрдВрдиреЗ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдорд╛рд░рд╛ред рдЧрд┐рдЯрд▓реИрдм рдПрдкреАрдЖрдИ рдХреЛ рд╕реНрд▓реИрд╢ рдХреЛ рдПрдиреНрдХреЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдХрд░рддрд╛ рд╣реВрдВ: {{ myvar | urlencode | regex_replace('/','%2F') }}. рдореИрдВ рдЕрдкрдиреЗ рдкреНрд▓реЗрдмреБрдХ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ Ansible рдФрд░ Jinja2 рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдпрд╣ рдЖрдк рдореЗрдВ рд╕реЗ рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдорд╛рд░ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдореИрдВрдиреЗ рдЗрд╕реЗ рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рд╣реИред

рдореБрдЭреЗ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмрд╣рд╕ рджрд┐рдЦрд╛рдИ рджреЗ рд░рд╣реА рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╡рд░реНрдг рдХреЛ рдкреНрд░рддрд┐рд╢рдд рдПрдиреНрдХреЛрдб рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдореЗрд░реА рд╕рдордЭ рдореЗрдВ рдпрд╣ рд╡рд░реНрддрдорд╛рди рдореЗрдВ RFC3986 рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИред https://tools.ietf.org/html/rfc3986#section -2.2

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, @ahuffman рдиреЗ рдПрдХ рдЙрдЪрд┐рдд рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рд╣реИред

рдореИрдВ рдЗрд╕реЗ рдмрдВрдж рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдлрд┐рд░ рд╕реЗ рд╕рд╛рдордиреЗ рдЖрдпрд╛ред рдЗрд╕реЗ рд░рдЦрдиреЗ рдХреЗ рдЦрд┐рд▓рд╛рдл рдореЗрд░реЗ рддрд░реНрдХ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдпрд╣рд╛рдВ рдереЗ, рд▓реЗрдХрд┐рди рдореИрдВ рдЙрдиреНрд╣реЗрдВ рджреЛрд╣рд░рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдкреАрдЖрд░ рдЦреБрд▓рд╛ рд╣реИ (# 864) рдЬреЛ рдЗрд╕рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯрд▓реИрдм рдХреЗ рдПрдкреАрдЖрдИ рдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдПрдХ рдФрд░ рдлрд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рдХрд░рддрд╛ рд╣реИред

рд╕рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░реЙрдХреНрд╕реА рд╕реЗрдЯрдЕрдкреЛрдВ рдХреЗ рдкреАрдЫреЗ рд░рдЦреЗ рдЬрд╛рдиреЗ рдкрд░ GitLab рдХрд╛ API рдЯреВрдЯ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП рдореБрджреНрджреЗ рдЦреБрд▓реЗ рд╣реИрдВ ( рдЙрджрд╛рд╣рд░рдг рд╕рдорд╕реНрдпрд╛ )ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореИрдВ рдПрдХ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреВрдВрдЧрд╛ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдРрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдпрд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:

{{ value|urlencode|replace("/", "%2f") }}

рдпрд╣ рдереЛрдбрд╝рд╛ рд╕рд╛ рд░реБрдЦ рдЕрдкрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рд▓реЗрдХрд┐рди рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рджреВрд╕рд░реЛрдВ рдХреА рдЧрд▓рддрд┐рдпреЛрдВ рдХреЛ рди рджреЛрд╣рд░рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрдирдХреЗ рд╕рд╛рдордиреЗ рдЖрдП рдереЗред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

dwt picture dwt  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

humiaozuzu picture humiaozuzu  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

hvnsweeting picture hvnsweeting  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

glasserc picture glasserc  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mitsuhiko picture mitsuhiko  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ