We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
Cannot edit or delete challenge pages with slug `evaluation`


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `app/grandchallenge/pages/forms.py`
Content:
```
1 from django import forms
2 from django.db.models import BLANK_CHOICE_DASH
3 from django_summernote.widgets import SummernoteInplaceWidget
4 
5 from grandchallenge.core.forms import SaveFormInitMixin
6 from grandchallenge.pages.models import Page
7 
8 
9 class PageCreateForm(SaveFormInitMixin, forms.ModelForm):
10     def __init__(self, *args, challenge, **kwargs):
11         self.challenge = challenge
12         super().__init__(*args, **kwargs)
13 
14     class Meta:
15         model = Page
16         fields = (
17             "display_title",
18             "permission_level",
19             "hidden",
20             "html",
21         )
22         widgets = {"html": SummernoteInplaceWidget()}
23         help_texts = {
24             "html": (
25                 "The content of your page. <b>Please note</b>: your html will "
26                 "be filtered after it has been saved to remove any non-HTML5 "
27                 "compliant markup and scripts. The filtering is not reflected "
28                 "in the live view so please <b>check the rendering of your "
29                 "page after you click save</b>. If you're going to paste from "
30                 "another source such as MS Word, please <b>paste without "
31                 "formatting</b> using <b>CTRL+SHIFT+V</b> on Windows or "
32                 "<b>⇧+⌥+⌘+V</b> on OS X."
33             )
34         }
35 
36 
37 class PageUpdateForm(PageCreateForm):
38     """Like the page update form but you can also move the page."""
39 
40     move = forms.CharField(widget=forms.Select)
41     move.required = False
42     move.widget.choices = (
43         (BLANK_CHOICE_DASH[0]),
44         (Page.FIRST, "First"),
45         (Page.UP, "Up"),
46         (Page.DOWN, "Down"),
47         (Page.LAST, "Last"),
48     )
49
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/app/grandchallenge/pages/forms.py b/app/grandchallenge/pages/forms.py
--- a/app/grandchallenge/pages/forms.py
+++ b/app/grandchallenge/pages/forms.py
@@ -1,4 +1,5 @@
 from django import forms
+from django.core.exceptions import ValidationError
 from django.db.models import BLANK_CHOICE_DASH
 from django_summernote.widgets import SummernoteInplaceWidget
 
@@ -33,6 +34,17 @@
             )
         }
 
+    def clean_display_title(self):
+        display_title = self.cleaned_data["display_title"]
+
+        if display_title.lower() in {"evaluation"}:
+            # evaluation results in a URL clash, especially with the update page.
+            raise ValidationError(
+                "Title not allowed, please select an alternative"
+            )
+
+        return display_title
+
 
 class PageUpdateForm(PageCreateForm):
     """Like the page update form but you can also move the page."""

{"golden_diff": "diff --git a/app/grandchallenge/pages/forms.py b/app/grandchallenge/pages/forms.py\n--- a/app/grandchallenge/pages/forms.py\n+++ b/app/grandchallenge/pages/forms.py\n@@ -1,4 +1,5 @@\n from django import forms\n+from django.core.exceptions import ValidationError\n from django.db.models import BLANK_CHOICE_DASH\n from django_summernote.widgets import SummernoteInplaceWidget\n \n@@ -33,6 +34,17 @@\n             )\n         }\n \n+    def clean_display_title(self):\n+        display_title = self.cleaned_data[\"display_title\"]\n+\n+        if display_title.lower() in {\"evaluation\"}:\n+            # evaluation results in a URL clash, especially with the update page.\n+            raise ValidationError(\n+                \"Title not allowed, please select an alternative\"\n+            )\n+\n+        return display_title\n+\n \n class PageUpdateForm(PageCreateForm):\n     \"\"\"Like the page update form but you can also move the page.\"\"\"\n", "issue": "Cannot edit or delete challenge pages with slug `evaluation`\n\n", "before_files": [{"content": "from django import forms\nfrom django.db.models import BLANK_CHOICE_DASH\nfrom django_summernote.widgets import SummernoteInplaceWidget\n\nfrom grandchallenge.core.forms import SaveFormInitMixin\nfrom grandchallenge.pages.models import Page\n\n\nclass PageCreateForm(SaveFormInitMixin, forms.ModelForm):\n    def __init__(self, *args, challenge, **kwargs):\n        self.challenge = challenge\n        super().__init__(*args, **kwargs)\n\n    class Meta:\n        model = Page\n        fields = (\n            \"display_title\",\n            \"permission_level\",\n            \"hidden\",\n            \"html\",\n        )\n        widgets = {\"html\": SummernoteInplaceWidget()}\n        help_texts = {\n            \"html\": (\n                \"The content of your page. <b>Please note</b>: your html will \"\n                \"be filtered after it has been saved to remove any non-HTML5 \"\n                \"compliant markup and scripts. The filtering is not reflected \"\n                \"in the live view so please <b>check the rendering of your \"\n                \"page after you click save</b>. If you're going to paste from \"\n                \"another source such as MS Word, please <b>paste without \"\n                \"formatting</b> using <b>CTRL+SHIFT+V</b> on Windows or \"\n                \"<b>\u21e7+\u2325+\u2318+V</b> on OS X.\"\n            )\n        }\n\n\nclass PageUpdateForm(PageCreateForm):\n    \"\"\"Like the page update form but you can also move the page.\"\"\"\n\n    move = forms.CharField(widget=forms.Select)\n    move.required = False\n    move.widget.choices = (\n        (BLANK_CHOICE_DASH[0]),\n        (Page.FIRST, \"First\"),\n        (Page.UP, \"Up\"),\n        (Page.DOWN, \"Down\"),\n        (Page.LAST, \"Last\"),\n    )\n", "path": "app/grandchallenge/pages/forms.py"}], "after_files": [{"content": "from django import forms\nfrom django.core.exceptions import ValidationError\nfrom django.db.models import BLANK_CHOICE_DASH\nfrom django_summernote.widgets import SummernoteInplaceWidget\n\nfrom grandchallenge.core.forms import SaveFormInitMixin\nfrom grandchallenge.pages.models import Page\n\n\nclass PageCreateForm(SaveFormInitMixin, forms.ModelForm):\n    def __init__(self, *args, challenge, **kwargs):\n        self.challenge = challenge\n        super().__init__(*args, **kwargs)\n\n    class Meta:\n        model = Page\n        fields = (\n            \"display_title\",\n            \"permission_level\",\n            \"hidden\",\n            \"html\",\n        )\n        widgets = {\"html\": SummernoteInplaceWidget()}\n        help_texts = {\n            \"html\": (\n                \"The content of your page. <b>Please note</b>: your html will \"\n                \"be filtered after it has been saved to remove any non-HTML5 \"\n                \"compliant markup and scripts. The filtering is not reflected \"\n                \"in the live view so please <b>check the rendering of your \"\n                \"page after you click save</b>. If you're going to paste from \"\n                \"another source such as MS Word, please <b>paste without \"\n                \"formatting</b> using <b>CTRL+SHIFT+V</b> on Windows or \"\n                \"<b>\u21e7+\u2325+\u2318+V</b> on OS X.\"\n            )\n        }\n\n    def clean_display_title(self):\n        display_title = self.cleaned_data[\"display_title\"]\n\n        if display_title.lower() in {\"evaluation\"}:\n            # evaluation results in a URL clash, especially with the update page.\n            raise ValidationError(\n                \"Title not allowed, please select an alternative\"\n            )\n\n        return display_title\n\n\nclass PageUpdateForm(PageCreateForm):\n    \"\"\"Like the page update form but you can also move the page.\"\"\"\n\n    move = forms.CharField(widget=forms.Select)\n    move.required = False\n    move.widget.choices = (\n        (BLANK_CHOICE_DASH[0]),\n        (Page.FIRST, \"First\"),\n        (Page.UP, \"Up\"),\n        (Page.DOWN, \"Down\"),\n        (Page.LAST, \"Last\"),\n    )\n", "path": "app/grandchallenge/pages/forms.py"}]}