URL-адреса Джанго полиморфны:
url(r'^so/(?P<required>\d+)/$', 'myapp.so', name='sample_view'),
url(r'^so/(?P<required>\d+)/(?P<optional>.*)/$', 'myapp.so', name='sample_view'),
очевидно, что вам нужно сделать так:
def sample_view(request, required, optional = None):
так что вы можете назвать его с тем же именем, и он будет работать нормально. Однако учтите, что вы не можете передать None в качестве обязательного аргумента и ожидаете, что он приведет вас к регулярному выражению без аргумента:
Неправильно:
{% url sample_view required optional %}
Правильно:
{% if optional %}
{% url sample_view required optional %}
{% else %}
{% url sample_view required %}
{% endif %}
Я не знаю, документировано ли это где-либо - я обнаружил это случайно - я забыл переписать имена URL, и это все равно работало:)