У меня есть это представление как context_processors.py, что означает, что я могу представить архив как раскрывающееся меню в выбранном HTML-теге.
def blogposts_processor(request):
blogposts = BlogPost.objects.all()
q=blogposts.dates('date', 'month')
s = [(i.strftime('%b'),i.strftime('%Y')) for i in q]
return {'blogposts': blogposts,'s':s}
Я уже представил такие даты, как февраль 2018 года, апрель 2018 года и т. Д .:
<script>
var n =[{% for i in q %}"{{ i|safe }}"{% if not forloop.last %},{% endif %}{% endfor %}];
var k=[];
var months = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"];
var dynamicSelect = document.getElementById("selectdate");
n.forEach(function(entry){
a = new Date(entry);
amonth= months[a.getMonth()];
ayear = a.getFullYear();
c = amonth + " " + ayear;
k.push(c);
var newOption = document.createElement("option");
newOption.text = c;
dynamicSelect.add(newOption);
</script>
Теперь мой URL для архива
url(r'^(?P<year>[0-9]{4})/(?P<month>[-\w]+)/$',
BlogPostMonthArchiveView.as_view(),
name="blogpost_month_archive"),
Я хочу, чтобы каждая опция в выпадающем меню выбора ссылалась на правильный архив. Поэтому каждая опция в меню должна иметь URL
{% url 'home:blogpost_month_archive' year='ayear' month='amonth' %}
Я начал и искал решение здесь
var url = "{% url 'home:blogpost_month_archive' year='2018' month='Feb' %}"
var year = $(this).attr('ayear');
var month = $(this).attr('amonth');
document.location.href = url.replace('2018', year).replace('Feb', month);
Я не слишком далеко, я просто не знаю, как прикрепить бит document.location.href к элементу options.
Я ищу только решение JavaScript, пожалуйста. Спасибо.