0001-general-display-correct-page-when-same-slug-is-repea.patch
combo/public/views.py | ||
---|---|---|
417 | 417 |
request.session['visited'] = True |
418 | 418 |
return HttpResponseRedirect(settings.COMBO_WELCOME_PAGE_PATH) |
419 | 419 | |
420 |
pages = {x.slug: x for x in Page.objects.filter(slug__in=parts)} |
|
420 |
pages = {} |
|
421 |
for page in Page.objects.filter(slug__in=parts): |
|
422 |
if not page.slug in pages: |
|
423 |
pages[page.slug] = [] |
|
424 |
pages[page.slug].append(page) |
|
425 | ||
421 | 426 |
if pages == {} and parts == ['index'] and Page.objects.count() == 0: |
422 | 427 |
return empty_site(request) |
423 | 428 | |
424 | 429 |
i = 0 |
425 | 430 |
hierarchy_ids = [None] |
426 | 431 |
while i < len(parts): |
427 |
try: |
|
428 |
page = pages[parts[i]] |
|
429 |
except KeyError: |
|
432 |
slug_pages = pages.get(parts[i]) |
|
433 |
if slug_pages is None or len(slug_pages) == 0: |
|
430 | 434 |
page = None |
431 | 435 |
break |
436 |
elif len(slug_pages) == 1: |
|
437 |
page = slug_pages[0] |
|
438 |
else: |
|
439 |
# multiple pages with same slugs |
|
440 |
try: |
|
441 |
page = [x for x in slug_pages if x.parent_id == hierarchy_ids[-1]][0] |
|
442 |
except IndexError: |
|
443 |
page = None |
|
444 |
break |
|
432 | 445 |
if page.parent_id != hierarchy_ids[-1]: |
433 | 446 |
if i == 0: |
434 | 447 |
# root page should be at root but maybe the page is a child of |
tests/test_public.py | ||
---|---|---|
405 | 405 |
assert 'Grand child of second' in resp.text |
406 | 406 | |
407 | 407 | |
408 |
def test_repeated_slug(app): |
|
409 |
Page.objects.all().delete() |
|
410 | ||
411 |
page1 = Page(title='Home Page', slug='index', template_name='standard') |
|
412 |
page1.save() |
|
413 | ||
414 |
page2 = Page(title='Second top level page', slug='second', template_name='standard') |
|
415 |
page2.save() |
|
416 | ||
417 |
page3 = Page(title='Child of second', slug='child-second', |
|
418 |
template_name='standard', parent=page2) |
|
419 |
page3.save() |
|
420 | ||
421 |
page4 = Page(title='Grand child of second (named third)', slug='third', |
|
422 |
template_name='standard', parent=page3) |
|
423 |
page4.save() |
|
424 | ||
425 |
page5 = Page(title='Third top level page', slug='third', template_name='standard') |
|
426 |
page5.save() |
|
427 | ||
428 |
for i, page in enumerate((page1, page2, page3, page4, page5)): |
|
429 |
page.order = i |
|
430 |
page.save() |
|
431 | ||
432 |
resp = app.get('/third/', status=200) |
|
433 |
assert 'Third top level page' in resp.text |
|
434 | ||
435 |
resp = app.get('/second/child-second/third/', status=200) |
|
436 |
assert 'Grand child of second (named third)' in resp.text |
|
437 | ||
438 |
# reverse page order, and expect same behaviour |
|
439 |
for i, page in enumerate(reversed((page1, page2, page3, page4, page5))): |
|
440 |
page.order = i |
|
441 |
page.save() |
|
442 | ||
443 |
resp = app.get('/third/', status=200) |
|
444 |
assert 'Third top level page' in resp.text |
|
445 | ||
446 |
resp = app.get('/second/child-second/third/', status=200) |
|
447 |
assert 'Grand child of second (named third)' in resp.text |
|
448 | ||
449 | ||
408 | 450 |
def test_menu(app): |
409 | 451 |
Page.objects.all().delete() |
410 | 452 |
page = Page(title='Page1', slug='index', template_name='standard') |
411 |
- |