I recently ran into an interesting and reasonably soluble problem. I've
switched from using a static sitemap to Django's Sitemap framework. Now,
my database has a ton of items to map (>200,000), so generating the
sitemap actually takes quite a long time. Unfortunately, it takes such a
long time that my web server actually times out waiting for the request,
which is obviously a big problem.
Rather than deal with adding exceptions in my web server or manually
creating static sitemaps, I'd greatly prefer to lower the number of items
on each page and have a larger number of entries on the index page.
Currently, the pagination uses a magic number of 50000, which is the
maximum number of items recommended by Google. That line is here:
https://github.com/django/django/blob/c2d5f2903cfaef4f8b17d86f4db706b61073a471/django/contrib/sitemaps/__init__.py#L50
I'd greatly prefer it if this was available as a configurable setting.
This would be a very simple, 2-line fix:
One to add a
SITEMAP_MAX_ITEMS = 50000
to Django's default settings,and another change the line linked about to
limit = settings.SITEMAP_MAX_ITEMS
It's a small change, but this would be greatly useful to me and other
Django sites with lots of items that use the Sitemap framework. In the
meantime, I'm just going try to override default Sitemap object.
What do you guys think? Does this make sense to you?
--
Ticket URL: <https://code.djangoproject.com/ticket/24736>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
* needs_better_patch: => 0
* needs_tests: => 0
* needs_docs: => 0
Comment:
Pull request submitted for your gracious consideration.
--
Ticket URL: <https://code.djangoproject.com/ticket/24736#comment:1>
Comment (by MarkusH):
Thanks for submitting this issue and patch. However, I'm -1 on adding a
global settings variable if you can just override `limit` on your sitemap
class much like `protocol`:
https://docs.djangoproject.com/en/1.8/ref/contrib/sitemaps/#django.contrib.sitemaps.Sitemap.protocol.
Or am I missing something?
If we're pursuing this issue I'd prefer to document `limit` as public API
and mention that its value shouldn't exceed 50000.
--
Ticket URL: <https://code.djangoproject.com/ticket/24736#comment:2>
* version: 1.8 => master
--
Ticket URL: <https://code.djangoproject.com/ticket/24736#comment:3>
Comment (by Miserlou):
Fine by me.. that's how I actually ended up solving the problem in my
application. I think that makes more sense anyway.
--
Ticket URL: <https://code.djangoproject.com/ticket/24736#comment:4>
* stage: Unreviewed => Accepted
* component: contrib.sitemaps => Documentation
Comment:
I agree as well. Requalifying as a documentation ticket and accepting.
--
Ticket URL: <https://code.djangoproject.com/ticket/24736#comment:5>
* owner: nobody => abhaga
* status: new => assigned
--
Ticket URL: <https://code.djangoproject.com/ticket/24736#comment:6>
* has_patch: 0 => 1
* type: New feature => Cleanup/optimization
--
Ticket URL: <https://code.djangoproject.com/ticket/24736#comment:7>
* status: assigned => closed
* resolution: => fixed
Comment:
In [changeset:"9096e2b5f75abf8e8882937bd3c3d47ccdc24e25" 9096e2b]:
{{{
#!CommitTicketReference repository=""
revision="9096e2b5f75abf8e8882937bd3c3d47ccdc24e25"
Fixed #24736 -- Documented the Sitemap.limit attribute
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/24736#comment:8>
Comment (by Tim Graham <timograham@…>):
In [changeset:"eb00b427fc9d12c8ba53ce3875d7e481cd825e38" eb00b427]:
{{{
#!CommitTicketReference repository=""
revision="eb00b427fc9d12c8ba53ce3875d7e481cd825e38"
[1.8.x] Fixed #24736 -- Documented the Sitemap.limit attribute
Backport of 9096e2b5f75abf8e8882937bd3c3d47ccdc24e25 from master
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/24736#comment:9>