<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Annabelle Wiegart</title>
    <description>The latest articles on DEV Community by Annabelle Wiegart (@annalauraw).</description>
    <link>https://dev.to/annalauraw</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3582989%2F7d3eadc9-6fd9-41f8-9b23-955f0cfa8259.png</url>
      <title>DEV Community: Annabelle Wiegart</title>
      <link>https://dev.to/annalauraw</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/annalauraw"/>
    <language>en</language>
    <item>
      <title>Your first django PR - from scratch to improved patch</title>
      <dc:creator>Annabelle Wiegart</dc:creator>
      <pubDate>Fri, 31 Oct 2025 19:19:30 +0000</pubDate>
      <link>https://dev.to/annalauraw/your-first-django-pr-from-scratch-to-improved-patch-5b2f</link>
      <guid>https://dev.to/annalauraw/your-first-django-pr-from-scratch-to-improved-patch-5b2f</guid>
      <description>&lt;h2&gt;
  
  
  A complete walkthrough
&lt;/h2&gt;

&lt;p&gt;You are ready to contribute code to Django, but you feel overwhelmed by the contributing documentation? You wish there was a step-by-step walkthrough from setting up your local environment to making your first pull request? This tutorial is for you.&lt;/p&gt;

&lt;p&gt;I recently made my first pull request to Django. Actually, it was the first pull request I ever made, since I had mainly worked on one-person-projects before. As I went along,I documented the steps, including links to the relevant documentation pages. I started from an existing patch that needed improvement, which is an approach that I recommend for your first ticket.&lt;/p&gt;

&lt;p&gt;In this tutorial, we will focus on the git/github workflow. For additional aspects, such as working with Django's ticket system, please also see &lt;a href="https://dev.to/_e6641d4181e2ba2945d1f/djangonautfirst-pr-week-1-2-929-1010-2ah2"&gt;Rim Choi's blog post&lt;/a&gt;. We will go through the following steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Setting up your local environment&lt;/li&gt;
&lt;li&gt;Finding a ticket to work on&lt;/li&gt;
&lt;li&gt;Working on your ticket&lt;/li&gt;
&lt;li&gt;Going through the contribution checklist&lt;/li&gt;
&lt;li&gt;Creating a pull request&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Setting up your local environment
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Getting a copy of Django’s development version
&lt;/h4&gt;

&lt;p&gt;As described in Django's &lt;a href="https://docs.djangoproject.com/en/5.2/intro/contributing/#getting-a-copy-of-django-s-development-version" rel="noopener noreferrer"&gt;contribution tutorial&lt;/a&gt;, fork the Django repo on GitHub. Then, clone your Django fork to your local machine:&lt;br&gt;
&lt;code&gt;git clone https://github.com/YourGitHubName/django.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Your Django fork is automatically added as a remote repository named "origin". You can verify this with the git remote command:&lt;br&gt;
&lt;code&gt;git remote -v&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;As described in &lt;a href="https://docs.djangoproject.com/en/5.2/internals/contributing/writing-code/working-with-git/#setting-up-local-repository" rel="noopener noreferrer"&gt;Working with Git and GitHub&lt;/a&gt;, you need to add the original Django repository as an additional remote. It's a good convention to call it "upstream":&lt;br&gt;
&lt;code&gt;git remote add upstream https://github.com/django/django.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you have not done so already with &lt;code&gt;git config --global&lt;/code&gt;, configure your username and email address for your local Django git repository:&lt;br&gt;
&lt;code&gt;git config user.name &amp;lt;your name&amp;gt;&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git config user.email &amp;lt;your email&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Creating a virtual environment
&lt;/h4&gt;

&lt;p&gt;Create and activate a virtual environment, as described in the &lt;a href="https://docs.djangoproject.com/en/5.2/intro/contributing/#getting-a-copy-of-django-s-development-version" rel="noopener noreferrer"&gt;contribution tutorial&lt;/a&gt;. Inside your virtual environment, install your local copy of Django in editable mode:&lt;br&gt;
&lt;code&gt;pip install -e /path/to/your/local/clone/django/&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Install the test dependencies:&lt;br&gt;
&lt;code&gt;cd tests&lt;/code&gt;&lt;br&gt;
&lt;code&gt;pip install -r requirements/py3.txt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If the installation fails, the cause could be a missing system-level dependency. Just as an example, on Ubuntu 22.04, I had to install the system package libmemcached-dev:&lt;br&gt;
&lt;code&gt;sudo apt install libmemcached-dev&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After installing the missing system packages, retry the installation of the test dependencies.&lt;/p&gt;

&lt;p&gt;Once the test dependencies are installed, you should be able to run &lt;a href="https://docs.djangoproject.com/en/5.2/intro/contributing/#running-django-s-test-suite-for-the-first-time" rel="noopener noreferrer"&gt;Django's test suite&lt;/a&gt;:&lt;br&gt;
&lt;code&gt;./runtests.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;The Django documentation has its own dependencies. You will likely need them later, so go ahead and install them:&lt;br&gt;
&lt;code&gt;cd ../docs&lt;/code&gt;&lt;br&gt;
&lt;code&gt;pip install -r requirements.txt&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, change back to the top-level folder of your Django repository, e.g. with &lt;code&gt;cd ..&lt;/code&gt;. Install the &lt;a href="https://docs.djangoproject.com/en/5.2/internals/contributing/writing-code/coding-style/#coding-style-pre-commit" rel="noopener noreferrer"&gt;pre-commit hooks&lt;/a&gt;:&lt;br&gt;
&lt;code&gt;pip install pre-commit&lt;/code&gt;&lt;br&gt;
&lt;code&gt;pre-commit install&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Finding a ticket
&lt;/h3&gt;

&lt;p&gt;Finding a beginner-friendly ticket to work on can seem a bit challenging at first. There is an &lt;a href="https://code.djangoproject.com/query?easy=1&amp;amp;stage=Accepted&amp;amp;status=assigned&amp;amp;status=new&amp;amp;order=id&amp;amp;desc=1&amp;amp;col=id&amp;amp;col=summary&amp;amp;col=owner&amp;amp;col=type&amp;amp;col=component" rel="noopener noreferrer"&gt;easy pickings filter&lt;/a&gt;, but tickets with this category are rare and often already assigned. I would recommend you to find the easiest ticket possible, so you can focus on the contribution workflow first. And if your first ticket is a quick success, you will be more motivated to keep going.&lt;/p&gt;

&lt;p&gt;In her excellent video tutorial &lt;a href="https://youtu.be/A-3eTMNQ3rM?si=DWhLKpFBuEb8FawZ&amp;amp;t=761" rel="noopener noreferrer"&gt;Your first Django contribution&lt;/a&gt;, Django fellow Sarah Boyce recommends the so-called "vulture strategy", i.e. working on a patch from a previously submitted pull request that needs improvement. &lt;a href="https://code.djangoproject.com/query?changetime=..Apr+30%2C+2025&amp;amp;has_patch=1&amp;amp;needs_better_patch=1&amp;amp;stage=Accepted&amp;amp;status=assigned&amp;amp;status=new&amp;amp;type=Bug&amp;amp;group=component&amp;amp;order=changetime&amp;amp;col=id&amp;amp;col=summary&amp;amp;col=changetime&amp;amp;col=owner&amp;amp;col=version" rel="noopener noreferrer"&gt;Her filters&lt;/a&gt; are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Triage stage = Accepted&lt;/li&gt;
&lt;li&gt;Has patch = Yes&lt;/li&gt;
&lt;li&gt;Patch needs improvement = Yes&lt;/li&gt;
&lt;li&gt;Modified = between "-" and 6 months ago&lt;/li&gt;
&lt;li&gt;Type = Bug&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9a6t0fdzwdzolv01zgk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn9a6t0fdzwdzolv01zgk.png" alt="Django ticket filters for patches that need improvement" width="658" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It can also be helpful to group the resulting ticket list by component:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu2ded5gc5wk85y8wew6a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu2ded5gc5wk85y8wew6a.png" alt="Option in Django's ticket system to group results by component" width="252" height="85"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you decide to work on a ticket, please assign it to yourself. If you are unsure whether someone else is currently working on the ticket, you can leave a comment asking if you can take over. If you don't get a response within 48 h, assigning the ticket to yourself is probably fine. See also &lt;a href="https://docs.djangoproject.com/en/5.2/internals/contributing/writing-code/submitting-patches/#claiming-tickets" rel="noopener noreferrer"&gt;"Claiming" tickets&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Working on your ticket
&lt;/h3&gt;

&lt;p&gt;The first thing you'll want to do is to &lt;a href="https://docs.djangoproject.com/en/5.2/internals/contributing/writing-code/working-with-git/#working-on-a-ticket" rel="noopener noreferrer"&gt;create a local branch for your ticket&lt;/a&gt; that is based on the upstream main branch:&lt;br&gt;
&lt;code&gt;git checkout -b ticket_&amp;lt;ticket number&amp;gt; upstream/main&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You chose a ticket with an existing patch that needs improvement. There may be several pull requests associated with your ticket. You should always base your work on the most recent patch, as explained in &lt;a href="https://youtu.be/A-3eTMNQ3rM?si=Cw2QoeLJdRv90BOd&amp;amp;t=885" rel="noopener noreferrer"&gt;Sarah Boyce's video&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Here's one way to get the existing patch into your local branch:&lt;br&gt;
&lt;code&gt;curl -L https://github.com/django/django/pull/xxxxx.patch | git am&lt;/code&gt;&lt;br&gt;
See also &lt;a href="https://docs.djangoproject.com/en/5.2/internals/contributing/writing-code/working-with-git/#working-on-a-patch" rel="noopener noreferrer"&gt;Working on a patch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For reproducing errors and testing your changes, you should work with a &lt;a href="https://docs.djangoproject.com/en/5.2/internals/contributing/writing-code/submitting-patches/#testing-with-a-django-project" rel="noopener noreferrer"&gt;Django test project&lt;/a&gt; which uses the same virtual environment that you just set up, with your local Django copy installed in editable mode.&lt;/p&gt;

&lt;p&gt;Once you made your changes, you'll probably want to do a commit. That's when the &lt;a href="https://docs.djangoproject.com/en/5.2/internals/contributing/writing-code/coding-style/#coding-style-pre-commit" rel="noopener noreferrer"&gt;pre-commit hooks&lt;/a&gt; are activated. Their purpose is to catch as many errors before you push them to the remote repository. For instance, your code will be formatted with &lt;a href="https://github.com/psf/black" rel="noopener noreferrer"&gt;black&lt;/a&gt;. You'll need to re-stage the changes made by the pre-commit hooks and retry the commit. You might have to manually fix some errors, too. Here is an example error message for a comment line that is too long:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;flake8...................................................................Failed&lt;/code&gt;&lt;br&gt;
&lt;code&gt;\- hook id: flake8&lt;/code&gt;&lt;br&gt;
&lt;code&gt;\- exit code: 1&lt;/code&gt;&lt;br&gt;
&lt;code&gt;django/conf/locale/de_CH/formats.py:28:80: W505 doc line too long (80 &amp;gt; 79 characters)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In this example, I needed to shorten my comment line to a maximum of 79 characters.&lt;/p&gt;

&lt;h3&gt;
  
  
  Going through the contribution checklist
&lt;/h3&gt;

&lt;p&gt;At this point, you have made one or several commits on your ticket branch to improve the existing patch.You have addressed all the comments in the ticket and in the previous pull request. You think your changes are ready for a new pull request.&lt;/p&gt;

&lt;p&gt;That's when you need to go through the &lt;a href="https://docs.djangoproject.com/en/5.2/internals/contributing/writing-code/submitting-patches/#contribution-checklist" rel="noopener noreferrer"&gt;contribution checklist&lt;/a&gt;. For your case, i.e. a bug fix that needs improvement, probably all sections are relevant except &lt;em&gt;New Feature&lt;/em&gt; and &lt;em&gt;Deprecating a feature&lt;/em&gt;. I'll pick out a few steps, but please do read the whole checklist and go through all the points that apply.&lt;/p&gt;

&lt;p&gt;Before you go through the contribution checklist, check if the upstream main branch has changed in the meantime. If so, please &lt;a href="https://docs.djangoproject.com/en/5.2/internals/contributing/writing-code/working-with-git/#after-upstream-has-changed" rel="noopener noreferrer"&gt;rebase your work&lt;/a&gt;:&lt;br&gt;
&lt;code&gt;git fetch upstream&lt;/code&gt;&lt;br&gt;
&lt;code&gt;git rebase upstream/main&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now, check whether the documentation builds without any errors. From your local Django directory:&lt;br&gt;
&lt;code&gt;cd docs&lt;/code&gt;&lt;br&gt;
&lt;code&gt;make html&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Back inside the top-level Django directory, make sure the test suite passes:&lt;br&gt;
&lt;code&gt;cd tests&lt;/code&gt;&lt;br&gt;
&lt;code&gt;./runtests.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.freecodecamp.org/news/git-squash-commits/" rel="noopener noreferrer"&gt;Squash&lt;/a&gt; your commits and the commits of previous contributors of the patch into one single commit. Check how many commits you need to edit:&lt;br&gt;
&lt;code&gt;git log -n 10 --oneline&lt;/code&gt;&lt;br&gt;
Let's say you want to squash 3 commits into one:&lt;br&gt;
&lt;code&gt;git rebase -i HEAD~3&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zlu0yjvjwpifc03ulb2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1zlu0yjvjwpifc03ulb2.png" alt="Git editor showing the commits to be rebased" width="800" height="70"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leave the word &lt;em&gt;pick&lt;/em&gt; next to your last commit. Replace &lt;em&gt;pick&lt;/em&gt; with &lt;em&gt;squash&lt;/em&gt; next to the other two commits.&lt;/p&gt;

&lt;p&gt;Save the file. git will open a new file for you with the combined commit messages. Edit them so they match Django's &lt;a href="https://docs.djangoproject.com/en/5.2/internals/contributing/committing-code/#committing-guidelines" rel="noopener noreferrer"&gt;commit message format&lt;/a&gt;. Don't forget to mention the co-authors of the patch, i.e. the authors of the previous patch which you improved. Example:&lt;br&gt;
&lt;code&gt;Fixed #35095 -- Clarified Swiss number formatting in docs/topics/i18n/formatting.txt.&lt;/code&gt;&lt;br&gt;
&lt;code&gt;Co-Authored-By: Name &amp;lt;email@address&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Now you can push your squashed commit to your remote fork:&lt;br&gt;
&lt;code&gt;git push origin ticket_&amp;lt;ticket number&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If you messed up the commit message, e.g. you forgot the final period, and you already pushed your changes to your Django fork, you can rewrite the commit message like so:&lt;br&gt;
&lt;code&gt;git rebase -i HEAD~1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Write "reword" next to your commit in the text editor:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzt0u3n4n3sg2l54oahy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzt0u3n4n3sg2l54oahy.png" alt="Git editor showing the commit to be rebased" width="800" height="57"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Save the file. A new file opens where you can edit your commit message. Make your changes, and save this second file, too. The commit message is now rewritten.&lt;br&gt;
If you had pushed the changes already to your Django fork, you need to force-push the modified commit:&lt;br&gt;
&lt;code&gt;git push --force origin &amp;lt;your branch&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;If this is your first Django contribution, please add yourself to the &lt;a href="https://github.com/django/django/blob/main/AUTHORS" rel="noopener noreferrer"&gt;AUTHORS&lt;/a&gt; file and submit a &lt;a href="https://www.djangoproject.com/foundation/cla/" rel="noopener noreferrer"&gt;Contributor License Agreement&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating the pull request
&lt;/h3&gt;

&lt;p&gt;Now it's finally time to make your pull request! As described in the &lt;a href="https://docs.djangoproject.com/en/5.2/intro/contributing/#pushing-the-commit-and-making-a-pull-request" rel="noopener noreferrer"&gt;contributing tutorial&lt;/a&gt;, go to &lt;a href="https://github.com/django/django/" rel="noopener noreferrer"&gt;Django's GitHub page&lt;/a&gt;, or call the URL &lt;a href="https://github.com/GITHUB_USERNAME/django/pull/new/BRANCH_NAME/" rel="noopener noreferrer"&gt;https://github.com/GITHUB_USERNAME/django/pull/new/BRANCH_NAME/&lt;/a&gt;, substituting GITHUB_USERNAME with your actual username, and BRANCH_NAME with the name of your branch.&lt;/p&gt;

&lt;p&gt;Enter a description for the pull request. Mention the ticket number as suggested in the comment. If your patch is based on a previous pull request, mention it in the description. See my &lt;a href="https://github.com/django/django/pull/19933" rel="noopener noreferrer"&gt;example description&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Make sure your ticket appears in the &lt;a href="https://code.djangoproject.com/query?has_patch=1&amp;amp;needs_better_patch=0&amp;amp;needs_docs=0&amp;amp;needs_tests=0&amp;amp;stage=Accepted&amp;amp;status=!closed&amp;amp;order=changetime&amp;amp;desc=1" rel="noopener noreferrer"&gt;review queue&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If some GitHub checks fail, you can check the details of the failure via the three little dots next to the test:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3i3jc6m41dcqbddqijw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fe3i3jc6m41dcqbddqijw.png" alt="Django's GitHub CI tests" width="800" height="494"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If some linting- or formatting-related checks fail and you can fix the issue immediately, it is okay to force-push a rewritten commit. In other circumstances, you should avoid force-pushing since it can erase valuable context for the reviewer.&lt;/p&gt;

&lt;p&gt;While your code is being &lt;a href="https://docs.djangoproject.com/en/5.2/internals/contributing/writing-code/working-with-git/#after-review" rel="noopener noreferrer"&gt;reviewed&lt;/a&gt;, you may experience several iterations of the following cycle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;accept review feedback&lt;/li&gt;
&lt;li&gt;add commits to your local branch&lt;/li&gt;
&lt;li&gt;squash all new local commits into one review commit&lt;/li&gt;
&lt;li&gt;push the review commit to your remote branch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are looking for friendly Djangonauts willing to help you, go to the &lt;a href="https://discord.com/channels/856567261900832808/857650722261958666" rel="noopener noreferrer"&gt;#contributing-getting-started&lt;/a&gt; channel on the Django Discord server.&lt;/p&gt;

&lt;p&gt;Don't give up :) I hope your PR gets merged!&lt;/p&gt;

</description>
      <category>django</category>
      <category>opensource</category>
      <category>python</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
